让我们说我想在我的应用程序中将所有StackPanel的背景设置为某种颜色。 我在App.xaml中得到了以下内容:
<Style TargetType="StackPanel">
<Setter Property="Background" Value="#222222" />
</Style>
仅当StackPanel是纯StackPanel且StackPanel必须位于App下时才会起作用。但是,弹出对话框中StackPanel或StackPanel的子类的背景颜色不会因此而更改。例如:
public class MyStackPanel : StackPanel { ... }
解决子类化问题的一种方法是扩展UserControl,并将StackPanel嵌入到UserControl中。只要您不需要访问StackPanel的属性,这就没问题。
有什么想法吗?
进行WPF主题的最佳方法是什么?
答案 0 :(得分:2)
您可以为自定义类创建一个隐式样式,该样式继承自基类的样式
<Style TargetType="StackPanel">
<Setter Property="Background" Value="#222222" />
</Style>
<Style TargetType="{x:Type local:MyStackPanel}"
BasedOn="{StaticResource {x:Type StackPanel}}" />
答案 1 :(得分:0)
覆盖WPF控件不是一个好习惯。正如您所提到的,您需要为此设计一个UserControl后代。
您可以将StackPanel的属性(在UserControl中)绑定到UserControl后代的属性,您可以将其添加到代码中或添加到UserControl的内置属性中。
<UserControl DataContext="{Binding RelativeSource={RelativeSource Self}}">
<StackPanel Background="{Binding Path=Background}">
...
</StackPanel>
</UserControl>