2

タブ コントロールにデータを表示する WPF アプリケーション (.NET 3.0、VS2008) があります。このアプリケーションの実質的にすべてのコントロールで、カスタム カラーが必要です。基本的には、前景は白、背景は緑です。

私の問題は、XP テーマ (Luna など) がアクティブな場合、レンダリング コントロールに自動的に適用され、白いテキストが白い背景に書き込まれることです。たとえば、アクティブなタブ項目ヘッダーで:判読できないタブ項目ヘッダー

私が試してみました :

  • 埋め込まれたマニフェスト ファイルを生成されたアプリケーション (プロジェクト プロパティ内) から削除するには: 役に立ちません。
  • アプリケーション リソースで 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>

では、カスタム カラーを使用してクラシック テーマを取得するにはどうすればよいでしょうか。

4

2 に答える 2

2

オペレーティング システム全体で一貫した動作と外観を確保するための最善の策は、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>

ボンチャンス!

于 2009-05-13T14:26:40.293 に答える
-1

WPF Futures プロジェクトの WPF テーマを使用してみませんか! WPF テーマ

代替テキスト http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=wpf&DownloadId=62497

于 2009-05-04T13:06:15.657 に答える