允许鼠标消息的子集通过WPF中的控件

时间:2017-01-09 22:26:40

标签: c# wpf xaml

假设我在XAML中有两个元素。为了便于说明,假设我有一个列表视图和一个网格。像这样:

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

我使用网格在列表视图的顶部放置一个大的红色半透明叠加层(即网格在Z顺序中更高)。

现在,这种安排意味着网格将阻止鼠标消息进入底层列表视图,这正是我想要的......而且效果很好。

但是意外的结果是网格还会阻止listview接收鼠标滚轮消息,这不是我想要的。

所以我想知道是否有可能摆弄网格的命中测试以允许鼠标消息通过到底层列表视图但仍然阻止右/左点击,拖动滴等等。

或者,是否可以在网格上预览鼠标滚轮消息并转发&#39;他们到底层列表视图?

我对任何xaml或代码隐藏解决方案感到满意。 (我发誓我以前做过这件事,但对于我的生活,我似乎无法想出一个简单的方法)。

1 个答案:

答案 0 :(得分:0)

我不知道如何让某些鼠标事件可以测试而其他鼠标事件没有 - 这就是你当前的安排所需要的。但是,如果ListViewGrid的孩子,则可以利用路由事件来实现所需的行为。在这种情况下,您可能希望更改ListView而不是Grid的不透明度。最终用户将不再是明智之举 - 它应该看起来像ListView之上的半透明叠加层。

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

如果你让MyGrid&#39;处理PreviewMouseDown事件,这会阻止MouseDown事件冒泡到&#39; MyList&#39;但仍允许MouseWheel事件通过。

this.MyGrid.PreviewMouseDown += (o, e) =>
{
    e.Handled = true;
};