Generic.xaml 有什么特别之处? [英] What is so special about Generic.xaml?

查看:46
本文介绍了Generic.xaml 有什么特别之处?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在想办法如何组织我的 ResourceDictionary 文件,以便重复使用并与我团队的其他成员共享.

I've been trying to figure out how to organize my ResourceDictionary files for reuse and sharing with other members of my team.

我不断遇到Generic.xaml",但是如果我在 MSDN 上查看 Generic.xaml 或只是进行 Google 搜索,我似乎只会收到碰巧提到它的博客文章和论坛问题--我可以'似乎没有找到任何真正权威和明确的东西.

I keep coming across "Generic.xaml", but if I look on MSDN for Generic.xaml or just do a Google search, I only seem to get blog posts and forum questions that happen to mention it--I can't seem to hit upon anything really authoritative and clear.

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

What is the difference between Generic.xaml and MyRandomlyNamedResourceDictionary.xaml? It seems like either way, I have to reference ResourceDictionaries stored in libraries with the Source attribute. E.g.,:

<Application.Resources>
    <ResourceDictionary
        Source="/CommonLibraryWpfThemes;component/Themes/Generic.xaml"
</Application.Resources>

那么 Generic.xaml 究竟提供了什么优势呢?如果我不想为我的应用程序提供多种外观"(即,如果我只有一个主题),它是否有任何目的?

So what advantage does Generic.xaml provide exactly? Does it have any purpose if I'm not trying to give my application multiple "looks" (i.e., if I have only one theme)?

推荐答案

WPF 中的每个控件都有一个默认样式,其中提供控件的默认 ControlTemplate.WPF 在与控件位于同一程序集中的 Themes 文件夹中的特殊资源字典中查找默认样式.默认样式的键由 Control.DefaultStyleKey 依赖属性提供,其默认值在 Control 的每个子类中被覆盖.

Every Control in WPF has a default Style that provides, among other things, the Control's default ControlTemplate. WPF looks for the default style in a special resource dictionary in the Themes folder in the same assembly as the control. The key for the default style is provided by the Control.DefaultStyleKey dependency property, the default value of which is overridden in each sub-class of Control.

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

The name of the resource dictionary depends on the current Windows theme e.g. on Vista using the Aero theme, the dictionary is called Aero.NormalColor.xaml, on XP using the default theme it is Luna.NormalColor.xaml. If the style is not found in the theme dictionary, it looks in Generic.xaml i.e for controls whose look doesn't depend on the theme.

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

This only applies to any custom controls you have defined i.e. classes derived from Control, directly or indirectly. You can change the default style for a standard control by deriving from it and calling DefaultStyleKeyProperty.OverrideMetadata in the static constructor, but you then have to supply the full style including ControlTemplate.

请注意,您可以使用 ThemeInfo 属性告诉 WPF 在外部程序集中查找默认样式.外部程序集必须命名为 <YourAssembly>.<ThemeName>.dll 例如PresentationFramework.Aero.dll.

Note that you can tell WPF to look in an external assembly for your default style by using the ThemeInfo attribute. The external assembly must be named <YourAssembly>.<ThemeName>.dll e.g. PresententationFramework.Aero.dll.

这篇关于Generic.xaml 有什么特别之处?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆