我有一个仅由UserControl派生控件组成的控件库。我正在使用第三方创建的程序集来“修饰”我的控件。在常规的WPF应用程序项目中,我需要做的是从Application.xaml中的程序集合并资源字典:
<Application x:Class="Application"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary Source="/ThirdPartyAssembly;component/SomeSkin.xaml" />
</Application.Resources>
</Application>
我尝试通过在我的控制库中将资源字典添加到Generica.xaml来实现相同的效果:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/ThirdPartyAssembly;component/SomeSkin.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
但这不起作用。从我一直在阅读的看来,这种方法似乎只适用于源自Control的控件?
我已经尝试/检查了以下内容:
<Assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)>
我是否可以在没有将资源字典添加到库中的每个控件的情况下对控件进行换肤?
在一天结束时,我在WinForms应用程序中托管我的WPF用户控件 - 所以我无法使用在Application.xaml中设置皮肤的明显方法,就像我在使用来自WPF申请。
答案 0 :(得分:0)
确保在您的Windows窗体中托管的最顶层 Generic.xaml
的{{1}}部分中正确引用Resources
。
我个人认为主题适用于源自UserControl
的任何内容,因此Control
(因为UserControl
本身来自UserControl
)。
我已经测试了上面的步骤1和2,我的用户控件在我的Windows窗体中托管时应用了这些文件。
话虽如此,我还没有尝试过应用任何基于主题的第三方工具(外部装配)。所以这是我不确定的事情......
如果我可以在WindowsFormsHost中将Control
(第三方)主题应用于我的用户控件,请告诉您。但关键是WindowsFormsHost中的最顶层 UserControl必须引用其中的主题。
如果上述提示不起作用,请分享您的想法。