请解释什么是主题和generic.xaml?

10 浏览
0 Comments

请解释什么是主题和generic.xaml?

我一直在试图找出如何组织我的ResourceDictionary文件以便与团队中的其他成员共享和重用。

我一直看到“Generic.xaml”,但如果我在MSDN上搜索Generic.xaml或者只是进行谷歌搜索,我似乎只能找到提到它的博客文章和论坛问题,我似乎找不到真正权威和清晰的内容。

Generic.xaml和MyRandomlyNamedResourceDictionary.xaml有什么区别?无论哪种方式,我都必须使用Source属性引用存储在库中的ResourceDictionaries。例如:

Source="/CommonLibraryWpfThemes;component/Themes/Generic.xaml"

那么,Generic.xaml到底有什么优势呢?如果我不打算给我的应用程序提供多种“外观”(即只有一个主题),它有什么作用吗?

0
0 Comments

themes和generic.xaml是WPF中用于定义控件默认样式的概念和文件。themes文件夹是generic.xaml文件所在的文件夹,而generic.xaml文件则是WPF应用程序中默认的资源字典文件。要让generic.xaml文件起作用,需要满足两个条件:一是generic.xaml文件必须在项目的Themes子目录下,二是程序集必须标记有ThemeInfoAttribute属性。

generic.xaml文件中定义的样式会作为默认样式应用于控件。要使样式成为默认样式,必须同时指定TargetType和x:Key属性,其中TargetType指定要应用样式的控件类型。

如果希望为应用程序添加主题和主题切换功能,可以通过编码实现,而generic.xaml文件仅定义默认的资源字典。

关于"default styles"的含义,请问是指所有按钮都会自动应用TargetType为"Button"的样式吗?还是我仍然需要通过写"

0
0 Comments

主题和generic.xaml是用于定义WPF控件的默认样式和控件模板的重要概念。每个WPF控件都有一个默认样式,其中包括控件的默认ControlTemplate。WPF在与控件相同的程序集中的Themes文件夹中的一个特殊资源字典中查找默认样式。默认样式的键由Control.DefaultStyleKey依赖属性提供,其默认值在每个Control子类中被覆盖。

资源字典的名称取决于当前的Windows主题,例如在使用Aero主题的Vista上,字典称为Aero.NormalColor.xaml,在使用默认主题的XP上,它是Luna.NormalColor.xaml。如果在主题字典中找不到样式,它会在Generic.xaml中查找,即适用于外观不依赖于主题的控件。

这仅适用于您定义的任何自定义控件,即从Control直接或间接派生的类。通过派生自标准控件并在静态构造函数中调用DefaultStyleKeyProperty.OverrideMetadata,您可以更改标准控件的默认样式,但然后必须提供完整的样式,包括ControlTemplate。

请注意,您可以通过使用ThemeInfo属性告诉WPF在外部程序集中查找默认样式。外部程序集的名称必须是..dll,例如PresententationFramework.Aero.dll。

所以你是说,如果我只想为普通Button控件提供一个新的ControlTemplate(即不编写自己的专门从Button派生的类),这不会被视为“主题”的一部分吗?

是的,如果您只想重新模板化或重新样式化标准控件,那么您可以在UserControl/Window/Application/Whatever级别使用常规的资源元素。您可以使用具有隐式键的样式(msdn.microsoft.com/en-us/library/…)来更改特定类型的所有控件。

现在它已经可以工作了(我认为微软正在更新他们的文档)。

0