代码之家  ›  专栏  ›  技术社区  ›  Mac

如何在WPF应用程序中禁用XP主题?

  •  2
  • Mac  · 技术社区  · 16 年前

    我有一个WPF应用程序(.NET 3.0,VS2008),它在选项卡控件中显示数据。此应用程序中几乎所有控件都需要自定义颜色:基本上是白色前景和绿色背景。

    我的问题是,当xp主题(比如luna)处于活动状态时,它会自动应用于呈现控件,这样我的白色文本就可以写入…白色背景。例如,在活动选项卡项标题上: Unreadable tab item header

    我已经尝试过:

    • 从生成的应用程序中删除嵌入的清单文件(在项目属性中):无用。
    • 要强制在应用程序资源中使用Windows经典主题:

      <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="/PresentationFramework.Classic;V3.0.0.0;31bf3856ad364e35;component/themes/classic.xaml" />
      </ResourceDictionary.MergedDictionaries>
      

    最后一次尝试对所有控件都很有效,除了仍显示如上所示的选项卡控件。

    有什么想法吗?

    更新 :我怀疑此行为是由于我必须应用于选项卡控件的自定义样式所致:

    <Window.Resources>
      <Style x:Key="Custom">
        <Setter Property="Control.Background" Value="#FF47C7C8" />
        <Setter Property="Control.Foreground" Value="White" />
      </Style>
      <Style TargetType="TabControl" BasedOn="{StaticResource Custom}" />
    </Window.Resources>
    

    那么我怎样才能用定制的颜色来获得经典的主题呢?

    2 回复  |  直到 16 年前
        1
  •  2
  •   Peter    16 年前

    为了确保跨操作系统的行为和外观一致,最好的办法是重新为TabItem控件设置模板,然后在选择TabItem时使用触发器修改新模板的一部分。尝试如下操作:

    <Grid>
    <Grid.Resources>
      <Style x:Key="Custom">
        <Setter Property="Control.Background" Value="#FF47C7C8"/>
        <Setter Property="Control.BorderBrush" Value="#FF47C7C8"/>
        <Setter Property="Control.Foreground" Value="White"/>
      </Style>
      <Style BasedOn="{StaticResource Custom}" TargetType="TabControl"/>
      <Style TargetType="TabItem">
        <Setter Property="Foreground" Value="White"/>
        <Setter Property="Template">
          <Setter.Value>
            <ControlTemplate TargetType="{x:Type TabItem}">
              <Grid>
                <Border
                  Name="Border"
                  Background="#FF47C7C8"
                  BorderBrush="#FFFFFF"
                  BorderThickness="1,1,1,1"
                  CornerRadius="2,2,0,0">
                  <ContentPresenter
                    x:Name="ContentSite"
                    HorizontalAlignment="Center"
                    Margin="12,2,12,2"
                    VerticalAlignment="Center"
                    ContentSource="Header"
                    RecognizesAccessKey="True"/>
                </Border>
              </Grid>
              <ControlTemplate.Triggers>
                <Trigger Property="IsSelected" Value="True">
                  <Setter Property="Panel.ZIndex" Value="100"/>
                  <Setter TargetName="Border" Property="Background" Value="#FF47C7C8"/>
                  <Setter TargetName="Border" Property="BorderThickness" Value="1,1,1,0"/>
                </Trigger>
              </ControlTemplate.Triggers>
            </ControlTemplate>
          </Setter.Value>
        </Setter>
      </Style>
    </Grid.Resources>
    <TabControl>
      <TabItem Header="Item 1"/>
      <TabItem Header="Item 2"/>
      <TabItem Header="Item 3"/>
      <TabItem Header="Item 4"/>
    </TabControl>
    

    机会!

        2
  •  -1
  •   Soni Ali    16 年前