自定义控件样式不起作用(通过Generic.xaml)

时间:2017-01-02 17:12:04

标签: c# .net wpf xaml themes

我在外部自定义控件库项目中为标准WPF控件和自定义控件提供了几种样式和模板。对于每个控件,我的ResourceDictionary文件夹中都有一个\Themes,还有一个Generic.xaml,其中包含所有其他XAML文件的合并字典。

我确定:

  • Generic.xaml位于项目根目录中的Themes\文件夹中
  • Generic.xaml有一个 Build Action Page
  • Generic.xaml使用自定义工具标记MSBuild:Compile
  • 外部库声明了以下行:[assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)]

我尝试了什么:

来源

  • Source="MyControl.xaml"
  • Source="/MyLibrary;component/Themes/MyControl.xaml"
  • Source="/MyLibrary;component/Themes/MyControl.xaml"
  • Source="/pack://application:,,,/Themes/MyControl.xaml"
  • Source="/pack://application:,,,/MyLibrary;component/Themes/MyControl.xaml"

应用

  • 使用所有可能的源声明手动引用我的应用程序中的Generic.xaml

然而,没有任何作用。即使我在访问Application.Current.Resources时可以看到已加载所有词典,该应用程序仍然完全不受控制。

值得注意的是,我的大多数控件主题都包含额外的动态资源(用于颜色等),这些资源在应用程序启动时手动加载。

我似乎面临与OP in this question here完全相同的未解决问题,但他们声明手动引用Generic.xaml适用于他们。

1 个答案:

答案 0 :(得分:0)

您是否在静态构造函数中定义了以下代码?

DefaultStyleKeyProperty.OverrideMetadata(typeof(YourCustomClass),new FrameworkPropertyMetadata(typeof(YourCustomClass)));

请勿在资源字典中使用x:key =“style_name”