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继承的自定义控件。在我看来,这是实现这种特定要求的途径。