2017-01-09 6 views
3

XAMLに2つの要素があるとします。説明のために、リストビューとグリッドがあるとします。このように:マウスメッセージのサブセットをWPFのコントロールに渡すことを許可する

<ListView Name="MyList> /> 
<Grid Name="MyGrid" Background="#80FF0000"/> 

私は、リストビューの上に大きな赤い半透明オーバーレイ配置するためにグリッドを使用します(つまりグリッドは、Z-順で高くなっています。)。

ここでは、グリッドは、マウスメッセージが元のリストビューに移動するのをブロックすることを意味します。これは、まさに私が望むものです。

しかし、意図しない結果として、グリッドはマウスホイールメッセージがリストビューで受信されるのをブロックすることになります。これは私が望むものではありません。

グリッドのヒットテストでマウスメッセージをに送信して、を経由して元のリストビューに移動できますが、右クリックまたは左クリック、ドラッグドロップなどはブロックすることができますか?

また、グリッド上のマウスホイールのメッセージをプレビューし、それらのメッセージを基になるリストビューに転送することは可能ですか?

xamlやコードビハインドの解決に満足しています。 (私はこれまでこれをやったことを誓っていますが、私の人生では簡単なアプローチを見つけることができません)。

答えて

0

私はいくつかのマウスイベントをテスト可能なものにする方法と、そうでないものとを認識していません。これはあなたの現在の配置で行う必要があります。ただし、ListViewGridの子であった場合は、ルーティングされたイベントを利用して目的の動作を実現することができます。このシナリオでは、Gridではなく、ListViewの不透明度を変更したいと考えています。エンドユーザーは誰も賢明ではありません。ListViewの上に半透明のオーバーレイのように見えるはずです。そして、コード内の後ろ

<Grid Name="MyGrid" 
     Background="#FFFF0000"> 
    <ListView Name="MyList" 
       Opacity="0.5" /> 
</Grid> 

あなたは「MyGrid」が「マイリスト」にバブルアップからMouseDownイベントを防ぐが、それでもを通じてMouseWheelイベントをできるようになりますPreviewMouseDownイベントを、処理させる場合。

this.MyGrid.PreviewMouseDown += (o, e) => 
{ 
    e.Handled = true; 
}; 
関連する問題