wpf - 如何防止孩子触发鼠标悬停事件?
问题描述
我有一个和TabItem
一个孩子。Grid
CheckBox
<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#MouseEnter
和MouseLeave
,它也是如此。
也在网上查了一下,没找到关于这个话题的东西。
理想情况下,最好有一个完整的 XAML 解决方案。
解决方案
从样式更改了这一行:
<Condition Binding="{Binding IsMouseOver, ElementName=templateRoot}" Value="true"/>
似乎这RelativeSource={RelativeSource Self}}
将针对所有孩子和父母。
推荐阅读
- azure - 如何使用 powershell 脚本在 App Insights 上正确设置连续导出?
- excel - 在 Excel 中自动完成或建议
- java - Can not read JSESSIONID cookie after setting cookie-config to httpOnly and secure in web.xml
- angular - 如何将表格链接到Angular中的详细视图
- java - 如何检查为什么 JVM 无法终止
- html - Giving different wallpapers to a page
- elasticsearch - Elasticsearch delete_by_query 版本冲突
- ios - 构建 XCTest UI 测试套件的最佳实践是什么?
- r - Return value between two characters in a string
- css - 当flexbox旁边的div宽度增加时,如何避免flexbox中的项目不从div中出来?