Generic.xaml 有什么特别之处?

发布于 2024-07-30 01:39:29 字数 587 浏览 5 评论 0原文

我一直在尝试弄清楚如何组织我的 ResourceDictionary 文件以供重复使用并与团队的其他成员共享。

我不断遇到“Generic.xaml”,但如果我在 MSDN 上查找 Generic.xaml 或只是进行 Google 搜索,我似乎只会收到碰巧提到它的博客文章和论坛问题 - 我似乎无法突然想到任何真正权威和清晰的东西。

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

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

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

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

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.

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>

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

陪我终i 2024-08-06 01:39:30

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 在外部程序集中查找默认样式。 外部程序集必须命名为 <YourAssembly>.<ThemeName>.dll,例如 PresententationFramework。航空.dll。

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.

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.

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.

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.

糖粟与秋泊 2024-08-06 01:39:30

对于特殊的 generic.xaml 文件(不区分大小写),必须满足两个条件:

  • 它必须位于项目的 Themes 子根文件夹中
  • 程序集必须用 ThemeInfoAttribute(通常在 AssemblyInfo.cs 中)

然后它充当您希望应用于控件的任何默认样式的默认查找位置。 另请注意,要使样式成为默认样式,它必须将其 TargetType 和 x:Key 声明为要设置样式的控件类型。

如果您希望将整个主题和主题切换添加到您的应用程序中(通过一些编码来完成),则此技术仅定义默认资源字典。

For a generic.xaml file (case insensitive) to be something special, two conditions must be met:

  • It must be in the Themes sub-root folder in the project
  • The assembly must be marked with the ThemeInfoAttribute (usually in AssemblyInfo.cs)

Then it serves as the default lookup location for any default styles you wish to apply to your Controls. Note also that for a style to be the default it must declare both its TargetType and x:Key as the Type of Control which is to be styled.

If you wish to add entire themes and theme switching to your application, that is accomplished with some coding, this technique merely defines the default resource dictionary.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文