2009-02-12 52 views
6

如果我使用WPF创建自定义控件,如何为匹配当前应用主题(Aero,Luna,Classic等)的控件提供样式?如何将我的控件的样式与当前主题相匹配? (WPF)

比如我想使用的Aero时,应用以下:

<Style> 
    <Setter Property="Background" Value="White"/> 
</Style> 

但后来使用LUNA时应用不同的风格:

<Style> 
    <Setter Property="Background" Value="#DFDFDF"/> 
</Style> 

我可以以某种方式扩展基本主题为我的新控件提供支持?

回答

7

有些链接可能被证明是有益的:

http://arbel.net/blog/archive/2006/11/03/Forcing-WPF-to-use-a-specific-Windows-theme.aspx

http://www.browsoft.com/tutorials/DefaultTheme.html

http://blogs.msdn.com/wpfsdk/archive/2007/07/31/using-themes-with-custom-controls.aspx

基本上你创建资源字典对于命名这样的自定义控件:

Classic.xaml (“Classic” Windows 9x/2000 look on Windows XP.) 
Luna.NormalColor.xaml (Default blue theme on Windows XP.) 
Luna.Homestead.xaml (Olive theme on Windows XP.) 
Luna.Metallic.xaml (Silver theme on Windows XP.) 
Royale.NormalColor.xaml (Default theme on the Windows XP Media Center Edition operating system.) 
Aero.NormalColor.xaml (Default theme on the Windows Vista operating system.) 

将这些控件的不同样式放在这些文件中,它们将根据当前OS的主题加载。

+0

这些链接很有帮助,谢谢。对我来说关键是AssemblyInfo.cs中的一个变化 - 将[ThemeInfo]属性的themeDictionaryLocation从'None'切换到'SourceAssembly'。 – ajlane 2009-02-14 11:27:53

0

您可以通过加载/卸载资源字典在WPF中使用不同的主题。这些字典应该包含您的控件的样式。当你换出字典时,WPF会将这些样式应用于你的控件。

例如,如果这是在WhiteStyle.xaml中,并且您加载了它,则您的文本块将全部以白色字体显示文本。

<Style TargetType="TextBlock"> 
    <Setter Property="Foreground" Value="White"/> 
</Style> 

,如果你换出来的BlackStyle.xaml包含

<Style TargetType="TextBlock"> 
    <Setter Property="Foreground" Value="Black"/> 
</Style> 

您的TextBlocks将显示在一个黑色的字体文本。 WPF为我们处理了很多细节,我们只需告诉它细节是什么。

交换资源字典非常简单,我将其留给你弄清楚。谷歌搜索“WPF主题”是一个很好的开始。

相关问题