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



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

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

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

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

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

因此,我想知道是否有可能篡改网格的点击测试,允许鼠标消息通过进入底层列表视图,但仍然阻止右/左点击、拖放等。

或者,是否可以在网格上预览鼠标滚轮消息并将其"转发"到底层列表视图?

我对任何xaml或代码隐藏解决方案都很满意。(我发誓我以前也这样做过,但就我的一生而言,我似乎无法想出一个简单的方法)。

我不知道有什么方法可以让一些鼠标事件可测试,而另一些则不可测试——这就是你目前的安排。但是,如果ListViewGrid的子级,则可以利用路由事件来实现所需的行为。在这种情况下,您可能希望更改ListView而不是Grid的不透明度。最终用户也不会知道——它看起来仍然像ListView顶部的半透明覆盖层。

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

然后在代码后面,如果让"MyGrid"处理PreviewMouseDown事件,这将防止MouseDown事件冒泡到"MyList",但仍然允许MouseWheel事件通过。

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

最新更新