我一直在试图弄清楚如何组织我的ResourceDictionary文件,以便重用并与我的团队其他成员共享。
我不断遇到" Generic.xaml ",但是如果我在Generic.xaml上查找MSDN,或者只是在谷歌上搜索,我似乎只得到碰巧提到它的博客帖子和论坛问题--我似乎找不到任何真正权威和清晰的东西。
Generic.xaml和MyRandomlyNamedResourceDictionary.xaml有什么区别?不管是哪种情况,我都必须使用Source属性引用存储在库中的ResourceDictionaries。例如,:
<Application.Resources>
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/Themes/Generic.xaml"
</Application.Resources>
那么Generic.xaml到底有什么优势呢?如果我不想给我的应用程序提供多个“外观”(例如,如果我只有一个主题),这有什么意义吗?
发布于 2009-08-05 10:15:26
WPF中的每个控件都有一个默认样式,该样式提供控件的默认ControlTemplate
。WPF在控件所在程序集中的Themes文件夹中的特殊资源字典中查找默认样式。默认样式的键由Control.DefaultStyleKey
依赖属性提供,该属性的默认值在控件的每个子类中被重写。
资源字典的名称取决于当前的Windows主题,例如,在使用Aero主题的Vista上,字典被称为Aero.NormalColor.xaml,在使用默认主题的XP上,它是Luna.NormalColor.xaml。如果在主题字典中找不到该样式,它将在Generic.xaml中查找外观不依赖于主题的控件。
这只适用于您定义的任何自定义控件,即直接或间接从Control派生的类。您可以通过从标准控件派生并在静态构造函数中调用DefaultStyleKeyProperty.OverrideMetadata
来更改标准控件的默认样式,但随后必须提供包括ControlTemplate在内的完整样式。
请注意,您可以使用ThemeInfo属性告诉WPF在外部程序集中查找默认样式。外部程序集必须命名为<
YourAssembly>
.<
ThemeName>
.dll,例如PresententationFramework.Aero.dll。
https://stackoverflow.com/questions/1228875
复制相似问题