プロジェクト内のすべてのボタンに適用するスタイルを宣言しました。スタイルは ResourceDictionary にあります。
<Style TargetType="StackPanel">
<Setter Property="Orientation" Value="Horizontal" />
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
</Style>
今、いくつかのウィンドウで、このスタイルから継承したいが、値を追加したい:
<Style TargetType="StackPanel">
<Setter Property="Margin" Value="5"/>
</Style>
問題は、グローバル スタイルから継承されないことです。継承するには、グローバル スタイルにキーを割り当てる必要があります。
<Style TargetType="StackPanel" x:Key="StackPanelStyle" />
そして、ウィンドウの XAML 継承 (またはオーバーライド - オプション) で、次のようにします。
<Style TargetType="StackPanel" BasedOn="StackPanelStyle" />
問題は、キーを割り当てた場合、それはグローバルではなく、各ウィンドウ/スコープで呼び出す必要があることです。
私の質問に対する解決策は、2 つのうちの 1 つである必要があります (他に見逃しているものはありますか?)。
- アプリケーション全体で対象となるすべてのコントロールに自動的に適用される、キーを持つグローバル スタイルを用意します。
- ResourceDictionary レベルの名前のないスタイルを参照せずにオーバーライドする方法。
実際に機能する名前付きスタイル (ResourceDictionary 内) の近くでスタイルを再宣言することを考えました。
<!--In the ResourceDictionary-->
<Style x:Key="StackPanelStyle" TargetType="StackPanel">
<Setter Property="Orientation" Value="Horizontal" />
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
</Style>
<!--In the app.xaml-->
<Style TargetType="StackPanel" BasedOn="{StaticResource StackPanelStyle}"/>
<!--In the window/page scope-->
<Style TargetType="StackPanel" BasedOn="{StaticResource StackPanelStyle}"/
しかし、愚かにもすべてのスタイルを再宣言するよりも優れたものを探しています。