2011-01-05 14 views
1

私はApp.xamlからExpressionDark.xamlを参照していますが、これは正常ですが、ItemsControlでItemContainerStyleを使用しようとすると、ItemsControlのアイテムは基本的なスタイルに戻ります。ItemContainerStyleオーバーライド汎用スタイル

<ItemsControl Grid.Column="1" VerticalAlignment="Center" Margin="10"> 
    <ItemsControl.ItemContainerStyle> 
     <Style> 
      <Setter Property="Margin" Value="5" /> 
     </Style> 
    </ItemsControl.ItemContainerStyle> 
    <ItemsControl.Items> 
     <TextBlock Text="{Binding Error}" /> 
     <TextBox Text="{Binding Path=Username,UpdateSourceTrigger=PropertyChanged,ValidatesOnDataErrors=True}" Validation.ErrorTemplate="{StaticResource validationTemplate}"></TextBox> 
     <TextBox Text="{Binding Path=Password,UpdateSourceTrigger=PropertyChanged,ValidatesOnDataErrors=True}" Validation.ErrorTemplate="{StaticResource validationTemplate}"></TextBox> 
     <Button VerticalAlignment="Center" HorizontalAlignment="Right" Command="{Binding SignInCommand}" IsEnabled="{Binding CanSignIn}" Content="Sign In"></Button> 
     <TextBox Text="{Binding Path=Username}"></TextBox> 
    </ItemsControl.Items> 
</ItemsControl> 

私は(簡単にアイテム間のマージンを加え)、垂直スタイリングのための良好な制御を見つけようとしているので、多分App.xamlで指定されたスタイルをオーバーライドしないより良い方法があります。

彼らは道あなたが余裕を使用TIA

答えて

0

は大丈夫ですが、あなたはApp.xamlで、その後1を別のスタイルを使用する場合、それはduffently App.xamlに1を使用しません。

これはWPFで動作する方法で、コントロールはスタイルに「最も近い」スタイルを使用し、このスタイルをコントロールに直接書き込むので、そのスタイルが使用されます。

あなたはExpressionDark.xamlに基づいて「BaseOn」プロパティでapp.xamlに新しいスタイルを作ることができますが、追加します:

<ItemsControl.ItemContainerStyle> 
    <Style> 
     <Setter Property="Margin" Value="5" /> 
    </Style> 
</ItemsControl.ItemContainerStyle> 
+0

しかし、これはどのプロパティが「BasedOn」ですか? ExpressionDark.xamlにItemContainerStyleが指定されているとは思いませんでしたか? – Ian

+0

ええと、私はあなたに誤解されているかもしれません、私はExpressionDark.xamlがスタイルだと思っていました... もしそうなら、スタイルが含まれていればそのスタイルにキーを与え、 "BasedOn" アイテムコンテナのプロパティ設定ツールを追加します。 – Notter

2

あなたが「場所で」スタイルを指定した場合、全く新しいスタイルと見なされます。 ExpressionDark.xamlの既定のスタイルがその要素のforgottonであるためです。これを避けるために何をすべきか

は次のとおりです。あなたのコントロールに対応するデフォルトのスタイルを探すBASEDON =

<ItemsControl.ItemContainerStyle> 
    <Style BasedOn="{StaticResource Existing}"> 
     <Setter Property="Margin" Value="5" /> 
    </Style> 
</ItemsControl.ItemContainerStyle> 

で基本スタイルを参照してください。 ExistingExpressionDark.xamlのResource-Keyに置き換えてください。それは適切なTargetTypeプロパティセットがありますので、あなたがそれを識別することができます:それはListBoxItemなどを持っているとして、使用中のListBoxItemがあなたのコントロールである

<Style TargetType="{x:Type ListBoxItem}"> x:Key=... 

を(フルモデルチェンジする)

をあなたはListBox代わりのItemsControlを使用して検討することコンテナ。

関連する問題