2010-09-04 41 views
0

我正在構建用於縮放和平移整個佈局的SL應用程序。一切工作正常,除了當我放大使用鼠標滾輪後,一些縮放滾動條開始使用鼠標滾輪後,我可以滾動不縮放。如果我在最後或開始時放置滾動條,我只能再次縮放。如何防止scrollviewer使用鼠標滾輪?我希望變焦只能由車輪操作。先謝謝你!如何防止ScrollViewer使用MouseWheel事件

這裏是我的鼠標滾輪方法的代碼時,我縮放內容:

protected override void OnMouseWheel(MouseWheelEventArgs e) 
    { 
     base.OnMouseWheel(e);    

     if (e.Delta > 0) 
     { 
      this.aniScaleX.To += 0.2; 
      this.aniScaleY.To += 0.2; 

      this.sbScale.Begin(); 
     } 
     else if (e.Delta < 0 && (this.aniScaleX.To > 1 && this.aniScaleY.To > 1)) 
     { 
      this.aniScaleX.To -= 0.2; 
      this.aniScaleY.To -= 0.2; 

      this.sbScale.Begin(); 
     } 

     Sizer.Width = Board.ActualWidth * (double)this.aniScaleX.To; 
     Sizer.Height = Board.ActualHeight * (double)this.aniScaleY.To; 

回答

1

鼠標滾輪事件爲冒泡 事件。這意味着,如果多個 鼠標滾輪的事件處理程序是 用於通過父子連接的對象 的序列登記在對象樹 關係,潛在地通過在每個關係對象 接收的 事件。冒泡隱喻表示 事件在源處開始,並且在對象樹上工作 。對於 冒泡事件,可用 給事件處理程序發送者標識所述事件的處理,不 不一定實際 接收到的輸入條件是 發起事件的對象的對象 。要獲取啓動事件的對象 ,請使用事件 數據的OriginalSource值。 http://msdn.microsoft.com/en-us/library/system.windows.uielement.mousewheel(VS.95).aspx

在我的情況下,ScrollViewer總是收到事件之前,因爲他在視覺樹的頂部。所以我只在鼠標滾輪事件的scrollviewer中註冊了事件處理程序,並且總是在發生這種情況時,我只是將其重定向到我的「原始」鼠標滾輪功能,它可以進行縮放。

我希望這樣可以幫助像我這樣「卡住」的人。謝謝大家對你的回答和建議..

0

你不應該只是註釋掉base.OnMouseWheel(E);部分,所以正常行爲不會被執行?

+0

謝謝你的幫助,但我已經試圖做到這一點,沒有運氣..ScrollViewer再次使用鼠標滾輪... – rjovic 2010-09-04 16:06:44

+0

認爲你應該向上移動你的視覺樹,找到ScrollViewer並設置IsEnabled屬性假。 – 2010-09-04 16:52:42

+0

我不能,因爲我使用scrollviewer來縮放內容後將其縮小... – rjovic 2010-09-04 17:20:45

4

嘗試設置:

e.Handled=true; 
1

這花了我一段時間(WPF),但基本上你應該在有事件的任何父母UIElement中使用AddHandler。

對我來說,我在我的MainWindow中做了這個。所以,我的代碼看起來像:

public MainWindow() 
{ 
    InitializeComponent(); 
    this.AddHandler(MainWindow.MouseWheelEvent, new RoutedEventHandler(this.MouseWheel_1), true); 
} 

這也意味着不重寫OnMouseWheelDown,而是創建了RoutedEventHandler委託的匹配方法和鑄造E(這將是一個RoutedEventArg)作爲MouseWheelEventArgs以訪問屬性要求以確定縮放。

我希望這有助於您的情況。

相關問題