24

我希望我的 WPF 应用程序是可换肤的,通过应用某个 XAML 模板,并且更改是应用程序范围的,即使对于动态控件或甚至不在视觉/逻辑树中的控件也是如此。

我可以用什么来完成这种类型的功能?是否有任何好的资源或教程可以显示如何完成此特定任务?

4

3 回答 3

10

采取的基本方法是在整个应用程序中使用资源并在运行时动态替换资源。

有关基本方法,请参见http://www.nablasoft.com/alkampfer/index.php/2008/05/22/simple-skinnable-and-theme-management-in-wpf-user-interface/

于 2008-09-23T13:46:35.100 回答
4

替换资源会起作用,但我发现“结构蒙皮”更强大!在 CodeProject 上阅读有关它的更多信息...

http://www.codeproject.com/KB/WPF/podder1.aspx

于 2008-09-23T13:53:37.610 回答
2

我找到了在不使用模板键的情况下将通用模板应用于所有控件的方法。解决方法是使用控件的类型作为 Style 键。

例子:

 <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>

这里的 Style 键是 x:Key="{x:Type Button}",因此该样式将应用于所有 button 类型的控件,而无需控件将 Style 属性声明为静态或动态资源。

于 2008-09-24T11:24:29.627 回答