在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属性声明为静态或者动态资源。