4

アプリケーション内のすべての StackPanel の背景を何らかの色に設定したいとしましょう。App.xaml で次の内容を取得しました。

<Style TargetType="StackPanel">
    <Setter Property="Background" Value="#222222" />
</Style>

これは、StackPanel が純粋な StackPanel であり、StackPanel がアプリの下にある必要がある場合にのみ機能します。ただし、ポップアップ ダイアログ内の StackPanel または StackPanel のサブクラスの背景色は、これによって変更されません。例えば:

public class MyStackPanel : StackPanel { ... }

サブクラス化の問題を解決する 1 つの方法は、UserControl を拡張し、StackPanel を UserControl に埋め込むことです。StackPanel のプロパティにアクセスする必要がない限り、これは問題ありません。

何か案が?

WPFテーマを設定する最良の方法は何ですか?

4

2 に答える 2

3

基本クラスのスタイルを継承するカスタムクラスの暗黙的なスタイルを作成できます

<Style TargetType="StackPanel">
    <Setter Property="Background" Value="#222222" />
</Style>

<Style TargetType="{x:Type local:MyStackPanel}" 
       BasedOn="{StaticResource {x:Type StackPanel}}" />
于 2012-09-06T19:19:41.640 に答える
0

WPFコントロールをオーバーライドすることはお勧めできません。あなたが述べたように、あなたはこれのためにUserControlの子孫を設計する必要があります。

StackPanelのプロパティ(UserControl内)をUserControlの子孫のプロパティにバインドできます。これは、コードまたはUserControlの組み込みプロパティに追加できます。

<UserControl DataContext="{Binding RelativeSource={RelativeSource Self}}">
    <StackPanel Background="{Binding Path=Background}">
    ...
    </StackPanel>
</UserControl>
于 2012-09-06T18:25:02.093 に答える