代码之家  ›  专栏  ›  技术社区  ›  Dimitrije Milenkovic

对多个对象使用相同的处理程序WPF C#

  •  0
  • Dimitrije Milenkovic  · 技术社区  · 6 年前

    这是在图像上拖动一些裁剪器的逻辑,而且它是有效的。但是我在不同的窗口上有多个图像(因为不同的文件),我想给它们分配相同的逻辑,但我不想在任何地方复制相同的代码。有办法吗?

    private bool isDragging;
    private Point clickPosition;
    
        private void OnMouseMove(object sender, MouseEventArgs e)
        {
            if (isDragging)
            {
                Point currentPosition = e.GetPosition(this.Parent as UIElement);
                double xdiff = currentPosition.X - clickPosition.X;
                double ydiff = currentPosition.Y - clickPosition.Y;
                croppingAdorner.HandleThumb(1, 1, 0, 0, xdiff, ydiff);
                clickPosition = e.GetPosition(this);
            }
        }
    
        private void OnMouseDown(object sender, MouseButtonEventArgs e)
        {
            if (CropHelper.IsPointInsideRect(e.GetPosition(this.originalImage), rc))
            {
                isDragging = true;
                clickPosition = e.GetPosition(this);
            }
        }
    
        private void OnMouseUp(object sender, MouseButtonEventArgs e)
        {
            isDragging = false;
        }
    
        private void OnMouseLeave(object sender, MouseEventArgs e)
        {
            isDragging = false;
        }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   mm8    6 年前

    你可以创造一种依附的行为。有关详细信息,请参阅以下链接。

    WPF Attached Behavior Example – Watermark Text

    Introduction to Attached Behaviors in WPF

    Blend Behaviors

    基本上有两种不同的方式来实施这些行为,通常被称为附加行为和混合行为。如果您熟悉依赖项属性和附加属性,则附加行为只是一个附加属性,带有 PropertyChangedCallback 附加到它上,对 DependencyObject 当依赖项属性的值更改时附加到的。

    与普通的附加行为相比,混合行为提供了更好的封装行为功能的方法。通过创建派生自 System.Windows.Interactivity.Behavior<T> 上课。您需要添加对 System.Windows.Interactivity .