【问题标题】:Unselected tabs disappear未选中的标签消失
【发布时间】:2016-03-31 18:56:25
【问题描述】:

我正在尝试解决在 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 专业知识已经走出了大门,我一直在努力解决这个问题。我知道它的这种风格控制着可见性。正如我所说,如果我删除它,我会得到正常的标签页眉。如果我将其留在原处并将背景颜色从“AliceBlue”更改为“Red”,我会看到更改。

我的问题:如何更改此样式以将指定的前景色应用于未选择选项卡的文本块?

【问题讨论】:

  • 在最后一个多重触发中,当 IsSelected 和 IsMouseOver 为 false 时,您将 TextBlock.Foreground 属性设置为 White
  • @GordonAllocman 不妨把它作为答案,因为他将前景和背景都设置为白色.. :)

标签: wpf xaml telerik


【解决方案1】:

在最后一个多触发器中,当 IsSelected 和 IsMouseOver 为 false 时,您将 TextBlock.Foreground 属性设置为 White

这条线就在这里&lt;Setter TargetName="ContentSite" Property="TextBlock.Foreground" Value="White" /&gt;

您还在以下设置器中将背景颜色设置为白色(我不确定不透明度的用途)

<Setter TargetName="ContentWrapper" Property="Background">
              <Setter.Value>
                <SolidColorBrush Color="White" Opacity="0.15" />
              </Setter.Value>
            </Setter>

【讨论】:

  • 没有将背景和前景设置为白色,我继承这个的人做到了。在这一点上,我才刚刚开始弄清楚这一切的作用。既然你已经指出来了,我可以看到他在做什么。现在我想知道为什么。感谢您的帮助。
  • @JeffDege by you 我主要指的是代码。很高兴我能帮上忙
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-27
  • 1970-01-01
  • 2010-09-11
  • 2013-02-10
  • 2021-11-19
  • 2022-08-19
  • 2020-11-14
相关资源
最近更新 更多