在WPF中将整个应用程序皮肤化的推荐方法是什么?
时间:2020-03-06 14:35:52 来源:igfitidea点击:
我希望通过应用某些XAML模板使WPF应用程序具有外观,并且更改应在整个应用程序范围内进行,甚至对于动态控件或者甚至不在视觉/逻辑树中的控件也是如此。
我可以用什么来完成这种功能?有没有很好的资源或者教程可以显示如何完成此特定任务?
解决方案
采取的基本方法是在整个应用程序中使用资源,并在运行时动态替换资源。
有关基本方法,请参见http://www.nablasoft.com/alkampfer/index.php/2008/05/22/simple-skinnable-and-theme-management-in-wpf-user-interface/
替换资源将起作用,但是我发现"结构化外观"更为强大!在CodeProject上阅读有关它的更多信息...
http://www.codeproject.com/KB/WPF/podder1.aspx
我找到了不使用模板键就将通用模板应用于所有控件的方法。解决方案是将控件的类型用作样式键。
例子:
<Application.Resources> <Style x:Key="{x:Type Button}" TargetType="{x:Type Button}"> <Setter Property="Button.Background" Value="CornflowerBlue"/> <Setter Property="Button.Template"> <Setter.Value> <ControlTemplate x:Name="MyTemplate"> ... </ControlTemplate> </Setter.Value> </Setter> </Style> </Application.Resources>
这里的样式键是x:Key =" {x:Type Button}",因此样式将应用于按钮类型的所有控件,而无需将Style属性声明为静态或者动态资源。