如何创建引用多个控件的WPF行为?

时间:2011-04-28 20:49:06

标签: c# wpf mvvm

我有一个包含大图像的ScrollViewer。我希望用户能够按住鼠标并拖动图像以将其左右移动,我正在尝试使用行为来实现它。问题是当用户按下鼠标按钮时,鼠标按下事件似乎无法在ScrollViewer上触发。有了代码,我会在图像上处理该事件,但是只有一个控件附加的行为我不知道如何解决这个问题。

我应该使用什么方法来创建附加到两个对象的System.Windows.Interactivity.Behavior?

2 个答案:

答案 0 :(得分:1)

您无需附加到元素即可向其添加事件处理程序。如果您的AssociatedObjectScrollViewer,那么您可以像这样获得对图片的引用:

var image = AssociatedObject.Content as Image;

然后你可以添加一个鼠标事件处理程序:

image.MouseLeftButtonDown += (s, e) => Debug.WriteLine("Clicked!");

因此,您所附加的对象,您的关联对象,是您的“家庭基地”,但您可以使用任何可以获取的对象,包括使用VisualTreeHelper走视觉树

答案 1 :(得分:1)

在ScrollViewer上引发了MouseLeftButtonDown事件。问题是ScrollViewer正在处理事件本身(e.Handled = true)。并且由于它已被处理,您的行为不会收到它。

根据您的操作,您可能只能使用PreviewMouseLeftButtonDown事件。这样,ScrollViewer是否会处理它并不重要,因为Behavior首先接收它。

您也可以尝试直接使用Drag& Drop事件。但我不确定这是否有效。