如何防止儿童触发鼠标悬停事件?

时间:2020-03-28 15:32:24

标签: wpf xaml

我有一个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

下的每个子元素都会发生这种情况

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

也在线查看,找不到关于该主题的任何内容。

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

1 个答案:

答案 0 :(得分:0)

从样式更改了此行:

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

RelativeSource={RelativeSource Self}}似乎将所有孩子和父母作为目标。