2017-08-28 1 views
0

私はCanvasを含むScrollViewerを含むUserControlを持っています。 私はカスタムズームロジックを持っていますが、ScrollViewerがスクロールできる場合、マウスホイールイベントは完全にスワイリングします。底に達すると、ズーミングは問題なく動作します。ScrollViewerがMouseWheelEventを呑み込まないようにしました。(アップデート:DevExpress LayoutControlが理由です)

private void CanvasOverlayControl_PreviewMouseWheel(object sender, MouseWheelEventArgs e) { 
     if(Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)) { 
      if(e.Delta > 0) { 
       // Wheel up 
       Zoom *= 1.15f; 
      } else if(e.Delta < 0) { 
       // Wheel down 
       Zoom *= 0.85f; 
      } 
     } 
    } 

この行がコンストラクタである(背後にあるコード)

 PreviewMouseWheel += CanvasOverlayControl_PreviewMouseWheel; 

私はその動作をSUPRESSできますか?

編集:

私はそれがコンテンツのスクロールを処理するためDevExpress社LayoutControlがこれを引き起こしているが分かりました。これを無効にする方法はありますか?事前

答えて

1

おかげで基本から始め...キャンバスは、実際に任意のマウスイベントを取得していることを確認します。それは私のヒットテスト

<Canvas Background="Transparent" 

を許可するようにいくつかの背景を必要とし、キャンバスのPreviewMouseWheelがヒットしたと私はe.Handled = true;を設定することにより、親のスクロールを無効にすることができます。

編集:サンプルプロジェクト:

<Window x:Class="WpfTests_2.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     ... 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid x:Name="grid1"> 
     <ScrollViewer> 
      <Canvas Background="Green" PreviewMouseWheel="Canvas_PreviewMouseWheel" Width="300" Height="1200"/> 
     </ScrollViewer> 
    </Grid> 
</Window> 

コード

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void Canvas_PreviewMouseWheel(object sender, MouseWheelEventArgs e) 
    { 
     e.Handled = true; 
    } 
} 

観測結果の背後にある:マウスがキャンバスの緑豊かなエリア、マウスホイールのスクロールなしの上にあります。マウスがキャンバスの外にあると、スクロールビューワがスクロールします。

+0

私はこれを試しましたが、ScrollViewerがそれ以上スクロールできない場合は、私のメソッドが呼び出されるだけです。 – horotab

+0

@horotab私のサンプルコードで編集しました。同じコードに対して同じ結果が得られるかどうかを確認してください。サンプルを再現できる場合は、実際のプロジェクトで何が違うのかを知る必要があります。あなたが再現できないなら、私たちのシステムは何とか​​非常に異なっており、おそらく私はあなたを助けません。 – grek40

+0

@horotabサンプルをチェックしましたか?質問はまだ開いていますか? – grek40

関連する問題