我试图解决在Windows XP和Windows 7上编写的WPF应用程序的问题,并且似乎已经有效。在Windows 10上,我们遇到了未选中标签消失的问题
主窗口有一个TabControl,它有一个应用于其TabItems的自定义样式:
<TabItem
x:Name="dashboardTab"
Header="Dashboard"
Style="{StaticResource mainTabStyle}"
>
<local:DashboardControl x:Name="DashboardControl"/>
</TabItem>
风格:
<Style x:Key="mainTabStyle" TargetType="{x:Type TabItem}">
<Setter Property="Margin" Value="10,5,0,0" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabItem}">
<Grid x:Name="ContentWrapper">
<ContentPresenter x:Name="ContentSite" VerticalAlignment="Bottom" HorizontalAlignment="Center" ContentSource="Header" Margin="12,2,12,2" Width="150" RecognizesAccessKey="True" />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="ContentWrapper" Property="Background" Value="AliceBlue" />
<Setter TargetName="ContentSite" Property="TextBlock.FontWeight" Value="Medium" />
<Setter TargetName="ContentSite" Property="TextBlock.Margin" Value="12,2,12,8" />
<Setter TargetName="ContentSite" Property="TextBlock.FontSize" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=FontSize, Converter={StaticResource mathConverter}, ConverterParameter=5}" />
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="False" />
<Condition Property="IsMouseOver" Value="True" />
</MultiTrigger.Conditions>
<Setter TargetName="ContentWrapper" Property="TextBlock.Foreground" Value="Black" />
<Setter TargetName="ContentWrapper" Property="Background">
<Setter.Value>
<SolidColorBrush Color="White" Opacity="0.5" />
</Setter.Value>
</Setter>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="False" />
<Condition Property="IsMouseOver" Value="False" />
</MultiTrigger.Conditions>
<Setter TargetName="ContentSite" Property="TextBlock.Foreground" Value="White" />
<Setter TargetName="ContentWrapper" Property="Background">
<Setter.Value>
<SolidColorBrush Color="White" Opacity="0.15" />
</Setter.Value>
</Setter>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我们的想法是将标签项标题的外观更改为不像标签,更像是一排选择按钮。
如果我从TabItems中删除样式,我会得到一组看起来很普通的标签页。如果我把它留在原地,在Windows 7下它可以正常工作。选定的选项卡以浅蓝色背景突出显示。但是,在Windows 10中,未选中的选项卡是不可见的。前景文字似乎是白色的。
不幸的是,我们的WPF专业知识已经走了出来,我一直试图解决这个问题。我知道它的这种风格控制了能见度。正如我所说,如果我删除它,我会得到正常的标题标题。如果我把它留在原地并改变背景颜色&#34; AliceBlue&#34;到&#34; Red&#34;,我看到了变化。
我的问题:如何更改此样式以将指定的前景颜色应用于未选定标签的文本块?
答案 0 :(得分:1)
在最后一个多触发器中,当IsSelected和IsMouseOver为false时,您将TextBlock.Foreground属性设置为White
此行<Setter TargetName="ContentSite" Property="TextBlock.Foreground" Value="White" />
并且您还在以下设置器中将背景颜色设置为白色(我不确定不透明度的用途)
<Setter TargetName="ContentWrapper" Property="Background">
<Setter.Value>
<SolidColorBrush Color="White" Opacity="0.15" />
</Setter.Value>
</Setter>