首页 > 解决方案 > 如何防止孩子触发鼠标悬停事件?

问题描述

我有一个和TabItem一个孩子。GridCheckBox

<TabControl>
    <TabItem Header="First" Style="{DynamicResource CustomTabItemStyle}">
        <Grid>
            <CheckBox Content="Check Me"/>
            <CheckBox Content="Check Me 2"/>
        </Grid>
    </TabItem>
</TabControl>

我正在设置样式TabItem并设置IsMouseOver触发器以更改TabItem背景颜色,如下所示:

<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="true"/>
<Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}" Value="Top"/>
</MultiDataTrigger.Conditions>
<Setter Property="Background" TargetName="mainBorder" Value="{StaticResource TabItem.MouseOver.Background}"/>
<Setter Property="Opacity" TargetName="mainBorder" Value="0.1"/>
<Setter Property="BorderBrush" TargetName="mainBorder" Value="{StaticResource TabItem.MouseOver.Border}"/>
<Setter Property="BorderThickness" TargetName="innerBorder" Value="0"/>
<Setter Property="BorderThickness" TargetName="mainBorder" Value="0"/>
</MultiDataTrigger>

问题是当鼠标悬停在复选框上时,会触发背景颜色更改。它发生在每个子元素下TabItem

我尝试将 a 设置Tag="TabItemParent"TabItem,但没有用。我一起尝试了许多其他条件,例如,但只有当鼠标悬停在实际而不是它的任何子元素IsMouseDirectlyOver上时,我才能让它工作。TabItem也尝试过使用 C#MouseEnterMouseLeave,它也是如此。

也在网上查了一下,没找到关于这个话题的东西。

理想情况下,最好有一个完整的 XAML 解决方案。

标签: wpfxaml

解决方案


从样式更改了这一行:

<Condition Binding="{Binding IsMouseOver, ElementName=templateRoot}" Value="true"/>

似乎这RelativeSource={RelativeSource Self}}将针对所有孩子和父母。


推荐阅读