2011-01-11 10 views
3

テーマファイル内のベースコントロール(TextBox、ComboBox)のデフォルトスタイルをオーバーライドしようとしています。このよう :テーマ/ Aero.NormalColor.xaml特定のテーマでスタイルをオーバーライドするには

<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}"> 
    <Setter Property="Background" Value="Green"/> 
</Style> 

テーマ/ classic.xamlで

<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}"> 
    <Setter Property="Background" Value="Black"/> 
</Style> 

しかし、これは動作するようには思えません。私はいつも変更なしでデフォルトのスタイルを取得します。私も

<Style x:Key="DefaultTextBoxStyle" TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}"> 
    <Setter Property="Background" Value="Green"/> 
</Style> 

のように特定のキー でそれを試してみましたが、XAMLでコントロールを宣言するとき、常にこのキーを使用します。何も動作していないようです。

私はapplication.xamlファイルにスタイルを入れても問題はありませんが、このスタイルをテーマに依存させたいと思っています。ところで、それは私自身のusercontrolsでうまく動作します。

誰かが私がここで間違っていることを教えてもらえますか?

私が使用するテーマを見たり、somesortのトリガを使用するためにクラスを使用することができますが、実際にはxamlでこれをやりたかったのです。

ありがとうございました

+0

app.xamlのコードを含めることはできますか? – bendewey

+0

David

答えて

1

あなたのテーマをどこか参照しましたか?例:

<Application 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    x:Class="Test.App"> 
    <Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Simple Styles.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

また、別のスタイルでテーマ内で参照されるサブスタイルでない限り、x:Keyをテーマに使用しないでください。

+0

私はaero-dllからテーマファイルを参照していました。(前のコメントを見てください)このようにassemblyinfoファイルを変更しました: wpfはmy拡張されたテーマファイル(classic.xaml、aero.normalcolor.xaml、luna.metallic.xaml、...) – David

1

残念ながら、ThemeInfoメカニズムは、同じアセンブリで定義されたコントロールにのみ使用されます。あなたが望むのは、あなた自身のものではないコントロールのテーマ固有のリソースを読み込むことです。私はそれをテストしていないが、あなたが必要と思うのはThemeDictionary Markup Extensionです。 ThemeDictionaryは、アセンブリからテーマに応じてResourceDictionaryをロードします。

Hereは静的に作業する人です。あなたが望むように見えます。

1

問題は循環参照を取得していることです。これは、クラスXXXでスタイルを定義するだけでなく、基本リソースと同じリソースを使用するためです。

は、私が「長い」時間前にこのことについてブログ記事を書いている

は、それが何をすべきかを説明します

http://blog.catenalogic.com/post/2009/07/20/Override-or-customize-WPF-themes-such-as-PresentationFrameworkAero.aspx

トリックがキーと同じリソースディクショナリにスタイルを定義することです」 「DefaultTextBoxStyle」を選択し、右のキー(「{x:Type TextBox}」)をスタイルに追加して、メインアプリケーションリソースに追加します。

+0

私はすでにあなたの素晴らしいブログを見てきました。私はxaml側に固執しているので、私はstylehelper class a go – David

+0

ちょっと私たちに知らせてくださいもっと助けが必要です。 –

+0

リンクが壊れています。私は正しいURL(http://geertvanhorrik.com/2009/07/20/override-or-customize-wpf-themes-such-as-presentationframework-aero/)を見つけましたが、zipファイルも404です。 – yourbuddypal

関連する問題