2009-05-04 15 views
2

私は、タブコントロールにデータを表示するWPFアプリケーション(.NET 3.0、VS2008)を持っています。基本的に白い前景色と緑色の背景:このアプリケーションのほぼすべてのコントロールにカスタム色が必要です。WPFアプリケーションでXPテーマを無効にするにはどうすればよいですか?

私の問題は、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

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

ボンのチャンス!

+0

http://msdn.microsoft.com/en-us/library/ms752032.aspxから入手してください。 Merci en tous cas! – Mac

+0

実際、私はKaxamlの "Simple Styles"(http://blog.nerdplusart.com/simplestyles)スニペットの1つを微調整しました。 WPFコントロールの外観をカスタマイズする必要がある場合には、これは最適な出発点です。 :) – Peter

関連する問題