是否可以使用Generic.xaml为UserControl派生控件设置外观?

时间:2011-09-09 02:57:40

标签: wpf

我有一个仅由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的控件?

我已经尝试/检查了以下内容:

  1. 我有这个汇编属性:<Assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)>
  2. 我的Generic.xaml文件位于/ Themes文件夹
  3. 我尝试在静态构造函数中覆盖DefaultStyleKey - 但这只是将所有内容都清空(可能是因为我没有为每个特定控件创建样式)
  4. 我是否可以在没有将资源字典添加到库中的每个控件的情况下对控件进行换肤?

    在一天结束时,我在WinForms应用程序中托管我的WPF用户控件 - 所以我无法使用在Application.xaml中设置皮肤的明显方法,就像我在使用来自WPF申请。

1 个答案:

答案 0 :(得分:0)

  1. 确保在您的Windows窗体中托管的最顶层 Generic.xaml的{​​{1}}部分中正确引用Resources

  2. 我个人认为主题适用于源自UserControl的任何内容,因此Control(因为UserControl本身来自UserControl)。

  3. 我已经测试了上面的步骤1和2,我的用户控件在我的Windows窗体中托管时应用了这些文件。

  4. 话虽如此,我还没有尝试过应用任何基于主题的第三方工具(外部装配)。所以这是我不确定的事情......

    如果我可以在WindowsFormsHost中将Control(第三方)主题应用于我的用户控件,请告诉您。但关键是WindowsFormsHost中的最顶层 UserControl必须引用其中的主题。

    如果上述提示不起作用,请分享您的想法。