2010-11-22 7 views
6

スタイル内にResourceDictionaryを定義することはできますか?リソースまたはResourceDictionaryをスタイルに追加できますか?

たとえば、StackPanelsに2つの異なるスタイルを設定し、すべてのボタンを青色にし、もう一方を赤色にしたいとします。これは可能ですか?上記のコードは、セッターのプロパティ値についてのエラーで失敗し

<Style x:Key="RedButtonsPanel" TargetType="{x:Type StackPanel}"> 
    <Setter Property="Orientation" Value="Horizontal" /> 
    <Setter Property="StackPanel.Resources"> 
     <Setter.Value> 
      <ResourceDictionary> 
       <Style TargetType="{x:Type Button}"> 
        <Setter Property="Background" Value="Red" /> 
       </Style> 
      </ResourceDictionary> 
     </Setter.Value> 
    </Setter> 
</Style> 

よう

何かが(それは明らかにnullではないにもかかわらず)nullにすることはできません。

スタイルへのResourceDictionaryをマージする方法があった場合、私は思っていたしかし、私は

<ResourceDictionary x:Key="RedButtons"> 
    <Style TargetType="{x:Type Button}"> 
     <Setter Property="Width" Value="100" /> 
     <Setter Property="Background" Value="Red" /> 
    </Style> 
</ResourceDictionary> 

<StackPanel Resources={StaticResource RedButtons} /> 

ような何かを行うことができます。

答えて

4

StackPanel.ResourcesDependencyPropertyではないため、スタイル内でそのプロパティを設定できるとは思われません。

+0

おかげで、私はあなたがおそらく正しいと思います。 ResourcesプロパティでDynamicResourceを使用することはできません。 – Rachel

3

各TargetTypeのスタイルをDockPanel Style.Resourcesに追加してみてください。

私はDockPanelスタイルと似たようなことをしました。 DockPanelに追加されたすべてのボタンまたはセパレータが一貫した方法でスタイリングされるようにしました。ここで

はサンプルです:

<Style x:Key="DockPanelToolBarStyle" TargetType="{x:Type DockPanel}"> 
    <Style.Resources> 
    <Style TargetType="Button" BasedOn="{StaticResource ButtonToolBarStyle}" /> 
    <Style TargetType="Separator" BasedOn="{StaticResource SeparatorToolBarStyle}" /> 
    </Style.Resources> 
    <Setter Property="Height" Value="45"/> 
    <Setter Property="Background" Value="{StaticResource ToolBarBrush}"/> 
</Style> 
関連する問題