9

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

例如,我想在使用 Aero 时应用以下内容:

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

但是在使用 Luna 时应用不同的样式:

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

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

4

2 回答 2

9

一些可能有用的链接:

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

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

于 2009-02-12T22:53:20.130 回答
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>

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

交换资源字典非常简单,我把它留给你自己弄清楚。谷歌搜索“WPF 主题”是一个很好的起点。

于 2009-02-12T22:24:00.107 回答