我必须将鼠标悬停在事件冒泡之后才会出现以下情况。
<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
,但这不起作用。
答案 0 :(得分:0)
IsMouseOver与是否为元素触发 MouseOver 事件无关。它与元素是 Mouse.DirectlyOver 还是其祖先之一有关。鼠标下元素的祖先将始终将其IsMouseOver设置为true。我不知道你特意想要完成什么,但如果IsMouseOver不适合你的需求,那么你可能需要根据你的要求创建和管理你自己的依赖属性。