我一直在试图弄清楚如何组织我的ResourceDictionary文件以便重用并与我团队的其他成员共享.
我一直遇到"Generic.xaml",但如果我在MSDN上查看Generic.xaml或者只是进行谷歌搜索,我似乎只会发现博客文章和论坛问题 - 我似乎无法打击任何真正权威和清晰的东西.
Generic.xaml和MyRandomlyNamedResourceDictionary.xaml有什么区别?看起来无论哪种方式,我都必须使用Source属性引用存储在库中的ResourceDictionaries.例如,:
<Application.Resources>
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/Themes/Generic.xaml"
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
那么Generic.xaml有什么优势呢?如果我不试图给我的应用程序多个"外观"(即,如果我只有一个主题),它是否有任何目的?
Phi*_*ney 145
WPF中的每个控件都有一个默认样式,除其他外,它提供了Control的默认值ControlTemplate.WPF在与控件相同的程序集中的Themes文件夹中的特殊资源字典中查找默认样式.默认样式的键由Control.DefaultStyleKeydependency属性提供,其默认值在Control的每个子类中被覆盖.
资源字典的名称取决于当前的Windows主题,例如在Vista上使用Aero主题,字典名为Aero.NormalColor.xaml,在XP上使用默认主题Luna.NormalColor.xaml.如果在主题词典中找不到该样式,则它会在Generic.xaml中查找,即对于外观不依赖于主题的控件.
这仅适用于您定义的任何自定义控件,即直接或间接从Control派生的类.您可以通过从标准控件派生并DefaultStyleKeyProperty.OverrideMetadata在静态构造函数中调用来更改标准控件的默认样式,但是您必须提供包括ControlTemplate在内的完整样式.
请注意,您可以使用ThemeInfo属性告诉WPF在外部程序集中查找默认样式.外部程序集必须命名为<YourAssembly >.<ThemeName >.dll例如PresententationFramework.Aero.dll.
Ken*_* K. 99
对于generic.xaml特殊情况的文件(不区分大小写),必须满足两个条件:
ThemeInfoAttribute(通常在AssemblyInfo.cs)然后,它将作为您希望应用于控件的任何默认样式的默认查找位置.另请注意,要将样式设置为默认样式,必须将其TargetType和x:Key声明为要设置样式的控件类型.
如果您希望将整个主题和主题切换添加到您的应用程序,这是通过一些编码完成的,此技术仅定义默认资源字典.
| 归档时间: |
|
| 查看次数: |
49654 次 |
| 最近记录: |