我在外部自定义控件库项目中为标准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
适用于他们。
答案 0 :(得分:0)
您是否在静态构造函数中定义了以下代码?
DefaultStyleKeyProperty.OverrideMetadata(typeof(YourCustomClass),new FrameworkPropertyMetadata(typeof(YourCustomClass)));
请勿在资源字典中使用x:key =“style_name”