2008-09-23 84 views
21

我希望我的WPF应用程序可以换肤,通过应用某个XAML模板,并将更改应用于应用程序范围,即使对于甚至不在视觉/逻辑树中的动态控件或控件。什么是建议在WPF中整个应用程序皮肤的方法?

我可以使用什么来完成这种类型的功能?有没有任何好的资源或教程可以说明如何完成这个特定的任务?

回答

10

要采取的基本方法是全部通过应用程序使用资源并在运行时动态替换资源。

http://www.nablasoft.com/alkampfer/index.php/2008/05/22/simple-skinnable-and-theme-management-in-wpf-user-interface/的基本方法

+0

嗨莫里斯,这两个链接现在都是404的。有找到替代品的机会吗? – Matt 2015-06-23 20:12:25

+0

@Matt https://web.archive.org/web/20130411050848/http://www.codewrecks.com/blog/index.php/2008/05/22/simple-skinnable-and-theme-management-in -wpf-user-interface – Xcodo 2015-07-23 10:44:56

4

资源的更换工作,但我发现,“结构性换肤”更加强大!了解更多关于它在CodeProject ...

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

+0

一个古老的问题和答案,但是,除非我误解了,似乎该页面上暗示的方法也至少部分地依赖于动态资源引用。 – 2012-11-02 12:51:00

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> 

这里的样式键为x:键=“{x:Type按钮}”,所以没有控制声明样式属性的样式将被应用到类型按钮的所有控制成为一个静态或动态资源。