WPF中出现意外的样式更改 [英] Unexpected style changes in WPF
问题描述
我有一个TabControl,每个TabItem都有一个框架。为简单起见,我在下面仅列出了一个TabItem。每当我将鼠标移动到框架中的任何控件上时,TabMtrol中选定的TabItem上都会发生IsMouseOver样式更改并更改为灰色。我做错了什么?
更新:我从样式中分离了ControlTemplate,并设置了按钮的模板以使用ControlTemplate而没有样式。这似乎是ControlTemplate的一个问题,因为它仍然会发生。
< ; TabControl 保证金 < span class =code-keyword> = 10 BorderThickness = 0 TabStripPlacement = 左 SnapsToDevicePixels = True >
< TabItem 标题 = 常规 样式 = {DynamicResource TopItem} 标记 = 热门 >
< Frame NavigationUIVisibility = 隐藏 来源 = < span class =code-keyword> Settings.xaml / >
< / TabItem >
< / TabControl >
< 样式 TargetType = TabItem X:键 = TopItem >
< Style.Triggers >
< 触发器 属性 = IsSelected < span class =code-attribute> 值 = True >
< Setter 属性 = 前景 值 = 白色 / >
< / Trigger >
< / Style.Triggers >
< Setter 属性 = 背景 值 = 透明 / >
< Setter 属性 = FontFamily 值 = 格鲁吉亚 / > ;
< Setter 属性 = FontSize 值 = 14 / & gt;
< Setter 属性 = 模板 >
< Setter.Value >
< ControlTemplate TargetType = {x:Type TabItem} >
< 网格 x:名称 = 面板 >
< 边框 x:名称 = ItemBorder BorderThickness = 1,0,1,0 BorderBrush = 黑色 填充 = 10 宽度 = 150 >
< ContentPresenter x:名称 = ContentSite
VerticalAlignment = 中心
HorizontalAlignment = 中心
ContentSource = 标题
/ < span class =code-keyword>>
< / Border >
< / Grid >
< ControlTemplate.Triggers >
< 触发器 < span class =code-attribute> 属性 = 标签 值 = 热门 >
< Setter TargetName = ItemBorder 属性 = BorderThickness 值 = 1,1,1,0 / >
<! - < Setter TargetName =ItemBorderProperty =CornerRadiusValue = 5,5,0,0/> - >
< / Trigger >
< 触发器 属性 = 标记 值 = 底部 >
< Setter TargetName = ItemBorder 属性 = BorderThickness 值 = 1,0,1,1 / >
<! - < Setter TargetName =ItemBorderProperty =CornerRadiusValue =0,0,5,5/> - >
< / Trigger >
< span class =code-keyword>< 触发器 Property = IsSelected 值 = True >
< Setter TargetName = ItemBorder 属性 = 背景 值 = < span class =code-keyword>#FF124E8D / >
< / Trigger >
< 触发器 属性 = IsMouseOver 值 = True >
< Setter < span class =code-attribute> TargetName = ItemBorder 属性 = 背景 值 = 灰色 / >
< / Trigger >
< < span class =code-leadattribute> / ControlT emplate.Triggers >
< / ControlTemplate >
< / Setter.Value >
< < span class =code-leadattribute> / Setter >
< / Style >
由于某种原因,我不得不添加SourceName =ContentSite。
< 触发器 property = IsMouseOver value = True sourcename = ContentSite >
< setter targetname = ItemBorder property = 背景 value = 灰色 / >
< / trigger >
I have a TabControl that has a frame in each TabItem. I only listed one TabItem below for simplicity. Whenever I move my mouse over any control in the frame, the IsMouseOver style change occurs on the selected TabItem in the TabControl and changes to Gray. What am I doing wrong?
Update: I seperated the ControlTemplate from the style and set the template of the button to use the ControlTemplate and no styling. It seems to be a problem with the ControlTemplate, because it still happens.
<TabControl Margin="10" BorderThickness="0" TabStripPlacement="Left" SnapsToDevicePixels="True" >
<TabItem Header="General" Style="{DynamicResource TopItem}" Tag="Top" >
<Frame NavigationUIVisibility="Hidden" Source="Settings.xaml" />
</TabItem>
</TabControl>
<Style TargetType="TabItem" x:Key="TopItem">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Foreground" Value="White" />
</Trigger>
</Style.Triggers>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="FontFamily" Value="Georgia"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabItem}">
<Grid x:Name="Panel" >
<Border x:Name="ItemBorder" BorderThickness="1,0,1,0" BorderBrush="Black" Padding="10" Width="150">
<ContentPresenter x:Name="ContentSite"
VerticalAlignment="Center"
HorizontalAlignment="Center"
ContentSource="Header"
/>
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="Tag" Value="Top">
<Setter TargetName="ItemBorder" Property="BorderThickness" Value="1,1,1,0" />
<!--<Setter TargetName="ItemBorder" Property="CornerRadius" Value="5,5,0,0" />-->
</Trigger>
<Trigger Property="Tag" Value="Bottom">
<Setter TargetName="ItemBorder" Property="BorderThickness" Value="1,0,1,1" />
<!--<Setter TargetName="ItemBorder" Property="CornerRadius" Value="0,0,5,5" />-->
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="ItemBorder" Property="Background" Value="#FF124E8D" />
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="ItemBorder" Property="Background" Value="Gray" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
I had to add SourceName="ContentSite" for some reason.
<trigger property="IsMouseOver" value="True" sourcename="ContentSite"> <setter targetname="ItemBorder" property="Background" value="Gray" /> </trigger>
这篇关于WPF中出现意外的样式更改的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!