我有一个带有TabItem元素的IsMouveOver触发器的问题.
当鼠标光标位于TabItem上时,其背景颜色会发生变化,这就是我想要的=>它的工作原理.但是,只要我的鼠标光标位于TabItem内的项目上,TabItem的背景颜色也会发生变化.
这是与样式相关的XAML:
以及Windows本身的XAML代码:
例如,使用此代码,当鼠标光标位于其包含的按钮上时,将触发TabItem的IsMouseOver.
如何解决这个问题?:P
谢谢你的帮助=)
它不起作用,因为Border as container接受所有事件,MouseOver
并不是例外.如果你想忽略MouseOver
某个部分的事件(你的项目的内部部分),那么只需将内部项目放在更宽的项目之上.
您可以在内部部件下添加网格控件并绑定Trigger
到其MouseOver
事件.
<Border Margin="2" Name="TabBorder" CornerRadius="6" BorderBrush="Transparent" Background="Transparent" BorderThickness="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <Grid> <Grid x:Name="gridMouseOver"/> <StackPanel Margin="12" Orientation="Horizontal" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <Rectangle Fill="Blue" HorizontalAlignment="Left" Margin="00,0,0,0"></Rectangle> <ContentPresenter ContentSource="Header" VerticalAlignment="Center" HorizontalAlignment="Stretch" Margin="10,0,0,0"></ContentPresenter> </StackPanel> </Grid> </Border> <ControlTemplate.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter Property="Panel.ZIndex" Value="100" /> <Setter TargetName="TabBorder" Property="Background" Value="#FFDFDFDF" /> <Setter TargetName="TabBorder" Property="BorderThickness" Value="2" /> <Setter TargetName="TabBorder" Property="BorderBrush" Value="{DynamicResource WindowTitleColorBrush}"/> </Trigger> <Trigger Property="IsEnabled" Value="False"> <Setter TargetName="TabBorder" Property="Background" Value="DarkRed" /> <Setter TargetName="TabBorder" Property="BorderBrush" Value="Black" /> <Setter Property="Foreground" Value="DarkGray" /> </Trigger> <Trigger SourceName="gridMouseOver" Property="IsMouseOver" Value="True"> <Setter TargetName="TabBorder" Property="Background" Value="{DynamicResource WindowTitleColorBrush}"/> </Trigger> </ControlTemplate.Triggers>