2011-04-28 41 views
1

我有一個包含大圖像的ScrollViewer。我希望用戶能夠按住鼠標並拖動圖像以將其左右移動,並且我正在嘗試使用行爲實現此功能。問題在於,當用戶按下鼠標按鈕時,鼠標停止事件似乎無法在ScrollViewer上觸發。有了後面的代碼,我會在圖像上處理該事件,但是隻會附加到一個控件的行爲,我不知道如何處理此問題。如何創建引用多個控件的WPF行爲?

我應該使用什麼方法創建一個System.Windows.Interactivity.Behavior連接到兩個對象?

+0

只是爲了澄清:你是否說你要開始圖像拖動,即使當用戶鼠標不在圖像上,但在滾動查看器? – 2011-04-28 20:52:07

+0

圖像應該佔據ScrollViewer的全部內容,所以除了滾動條以外,是的。 – 2011-04-28 21:03:37

回答

1

在ScrollViewer上引發了MouseLeftButtonDown事件。問題在於ScrollViewer正在處理事件本身(e.Handled = true)。而且由於它已經被處理,你的行爲不會收到它。

根據你在做什麼,你可能只能使用PreviewMouseLeftButtonDown事件。這種方式無關緊要,因爲行爲首先接收它,ScrollViewer會處理它。

您也可以嘗試直接使用拖放&拖放事件。但我不確定這是否會奏效。

+0

您的意思是圖像在它到達滾動查看器之前處理事件本身? – 2011-04-29 13:16:36

+0

否... ScrollViewer正在處理事件,如果我記得正確。通過MouseLeftButtonDown覆蓋。不完全確定如何以及爲什麼,但最終在訂閱該活動時不會收到通知,因爲它已由某人處理。 – harri 2011-04-29 14:45:47

+0

@harri好的。我假設它是由Image控件以類似於Javascript事件冒泡的方式處理的。 – 2011-04-29 15:28:27

1

您不需要附加到元素就可以添加事件處理程序。如果您AssociatedObjectScrollViewer那麼你可能能夠得到這樣對圖像的引用:

var image = AssociatedObject.Content as Image; 

,然後你可以添加鼠標事件處理程序:

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

所以您是對象附加到您的相關對象,是您的「家庭基地」,但您可以使用任何可以讓您掌握的對象,包括使用VisualTreeHelper來行走視覺樹。

相關問題