C# 如何阻止鼠标越过路由事件冒泡
对于以下场景,我必须停止鼠标悬停事件冒泡C# 如何阻止鼠标越过路由事件冒泡,c#,wpf,routed-events,C#,Wpf,Routed Events,对于以下场景,我必须停止鼠标悬停事件冒泡 <Window.Resources> <x:Array x:Key="strings" Type="sys:String" xmlns:sys="clr-namespace:System;assembly=mscorlib"> <sys:String>One</sys:String> <sys:String>Two</sys:S
<Window.Resources>
<x:Array x:Key="strings" Type="sys:String"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:String>One</sys:String>
<sys:String>Two</sys:String>
</x:Array>
<DataTemplate x:Key="MyDataTemplate">
<TextBlock Text="{Binding Path=IsMouseOver, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListViewItem}}"/>
</DataTemplate>
<DataTemplate x:Key="MyParentDataTemplate">
<Expander HeaderTemplate="{StaticResource MyDataTemplate}">
<ListView
ItemsSource="{StaticResource strings}"
ItemTemplate="{StaticResource MyDataTemplate}">
</ListView>
</Expander>
</DataTemplate>
<Style x:Key="ParentListViewItemStyle" TargetType="{x:Type ListViewItem}">
<Setter Property="Foreground" Value="Blue"/>
</Style>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="170"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ListView ItemContainerStyle="{StaticResource ParentListViewItemStyle}"
ItemsSource="{StaticResource strings}"
ItemTemplate="{StaticResource MyParentDataTemplate}">
</ListView>
</Grid>
一个
两个
问题是当我将鼠标移到任何子listviewitem上时。相应父对象的鼠标悬停也会实现。但我只是不想让父母把鼠标放在上面
我尝试附加该行为,并尝试设置
e.Handled=true
,但这不起作用。与是否为元素触发MouseOver事件无关。它与元素是鼠标.DirectlyOver还是它的祖先之一有关。鼠标下元素的祖先将始终将IsMouseOver设置为true。我不知道您具体想实现什么,但如果IsMouseOver不适合您的需要,那么您可能需要根据您的需求创建和管理自己的依赖属性。为什么要这样做?我有一些常用的datatemplate,我在这两者中都使用。我想在鼠标悬停时在父控件和子控件中提供不同的效果,但我不能。请编写一个从ListView继承的自定义控件。在我看来,这是实现这种特定要求的途径。