2016-12-14 20 views
0

リソースコントラクト(これもmodernui)に指定されているように、ユーザーコントロール(modernTab、modernui)が適用されています。辞書スタイルをローカルスタイルで上書きする

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="/FirstFloor.ModernUI;component/Assets/ModernUI.xaml" /> 
    <ResourceDictionary Source="/FirstFloor.ModernUI;component/Assets/ModernUI.Light.xaml"/> 
</ResourceDictionary.MergedDictionaries> 

も良いです:大丈夫です

は、このアプリのためのスタイリングは、次のようになりApp.xamlファイル内のいくつかのデフォルトのリソースを介して提供されます。しかし、私は、現代のタブの特定のインスタンスに使用しているリンクスタイルをオーバーライドしたいと思います。だから私のXAMLで、私はこのようにそれをやろうとしている:今

<mui:ModernTab ListWidth="Auto" 
       Layout="List" 
       Links ="{Binding MyViewModelLinks}"> 
    <mui:ModernTab.Resources> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="Foreground" Value="Black" /> 
      <Setter Property="Background" Value="Yellow" /> 
     </Style> 
    </mui:ModernTab.Resources> 
</mui:ModernTab> 

、私はダウンmodernTabコントロールの根性の内部でそれがListBoxItemsの束を持って、ソースを見てから知っている - これらが何でありますかスタイルを変えたい

なぜ私の「ローカル」スタイルがこの特定のインスタンスのために上書きおよび上書きされないのですか。何か案は?

私はApp.xamlで私のスタイルのオーバーライドを定義しようとしましたが(実際にはグローバルにしたくないのですが)、うまくいきませんでした。明らかに私は何かが欠けている。

+0

:これはトリックを行う必要がありModernTab'、[ 'ListBox'は' ListBox.ItemContainerStyle'付き] https://github.com/firstfloorsoftware/mui(あります/blob/cbd78931b5ffd1a77c8a82a423100e11015203c2/1.0/FirstFloor.ModernUI/Shared/Themes/ModernTab.xaml#L21)が設定されています。これは暗黙の 'ListBoxItem'スタイルよりも優先されると思います。構造全体が私にとって非常に柔軟に見えないので、そのスタイルを置き換える前に2度考えてください... – grek40

答えて

1

に役立ちます。 MUI `の` ControlTemplate`で

<mui:ModernTab ListWidth="Auto" 
       Layout="List" 
       Links ="{Binding MyViewModelLinks}"> 
     <mui:ModernTab.Resources> 
      <Style TargetType="ListBox"> 
       <Setter Property="ItemContainerStyle"> 
        <Setter.Value> 
         <Style TargetType="ListBoxItem"> 
          <Setter Property="Foreground" Value="Black" /> 
          <Setter Property="Background" Value="Yellow" /> 
         </Style> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </mui:ModernTab.Resources> 
    </mui:ModernTab> 
+0

ええ、ええ、それは動作します!私はなぜか分からない!リストボックスを指定してからツリーを下り、ListBoxItemスタイルを設定する必要があるのはなぜですか?なぜListBoxItemスタイルを直接設定できないのですか? – Coopernick

+0

ModernTabのデフォルトのControlTemplateにあるListBoxは、ListBoxのItemContainerStyleを設定するため、これが優先され、ModernTabのリソースとして指定する暗黙的なListBoxItemスタイルに適用されます。これは、スタイルの検索がどのように機能するかです。 – mm8

2

あなたがここでやっていることはModernTabのデフォルトのスタイルを上書きするが、特定のインスタンスのリソースを指定されていない、スタイルはまだあなたがここに行うために必要なものModernTab.xaml

から取られているのインスタンスのインラインスタイルを指定することですModernTab:

<mui:ModernTab ...> 
    <mui:ModernTab.Style> 
     <Style TargetType="mui:ModernTab"> 
      <!------- Full ModernTab Style -----> 
     </Style> 
</mui:ModernTab.Style> 

このインラインスタイルはデフォルトを上書きします。デフォルトのModernTabスタイルに基づいてスタイルを作成することはできません。デフォルトのスタイルには名前(x:Key)がないため、細かい部分を微調整するだけです。しかし、スタイル全体をコピーして、あなたが望むものを変更して代わりに使うことができます。おそらく、このようなあなたのModernTabインスタンス上のリソースファイルに入れて、それを使用する必要があります。

<mui:ModernTab Style={StaticResource MyAwesomeStyle} .../> 

ホープこれはあなたが「上書き」ModernTabでのListBoxのItemContainerStyleに必要

+1

BasedOn = "{StaticResource {x:Type mui :ModernTab}} "暗黙のスタイル(x:Keyを除く)がリソースディクショナリで宣言されている場合、WPFはスタイルのTargetTypeをキーとして自動的に使用します。 – Pavel

+1

@Pavel恐ろしい!暗黙的なキーを知っていましたが、暗黙的なキーを使ってスタイルを参照できるかどうかはわかりませんでした。実際には、多くの感覚を、ありがとう! –

+0

@Pavel正しいですか?私は次のような宣言があります: