我有一个支持WPF的C#(2008/.NET 3.5)类库程序集(基于这篇文章).
我创建了几个窗口,现在我正在尝试为它们创建一个通用的样式集.但是,因为它是一个类库(而不是WPF应用程序),所以我没有app.xaml(及其包含的Application和相应的Application.Resources)来存储这些样式以进行全局访问.
那么:我如何创建一个顶级的样式定义集,这些样式定义将被程序集中的所有xaml文件看到,因为我没有app.xaml(见上文)?和/或是否可以将一个有效的app.xaml 添加到类库中?
仅供参考,我尝试在ResourceDictionary.xaml文件中创建ResourceDictionary,并将其包含在"Window.Resources"块中的每个窗口中.结果是解决了按钮等的样式......但不适用于封闭的Window.我可以放入Window的开放块,它可以编译并在VS Design窗口中显示,但在实际运行时我得到一个解析异常(无法找到MyWindowStyle;我猜测Visual Studio看到后面包含的字典有问题的行,但CRL更顺序地执行,因此尚未加载ResourceDictionary).
感谢您的想法,但仍然没有...显然类库不会隐式支持generic.xaml用法.我将generic.xaml添加到我的类库项目中,并将其Build Action设置为"Resource".它包含:
我想要使用主题的窗口xaml如下所示:
...Buttons, etc...
虽然VS Design窗口没有显示使用MyWindow样式的窗口(即黑色背景),但它编译良好并启动.但是,当包含此类库的应用程序进行调用以导致显示此窗口时,我会收到XamlParseException:
找不到名为"{MyWindow}"的资源.
我也尝试省略Style参数,以查看默认情况下窗口是否会使用该样式(我尝试使用包含和不包含的generic.xaml中的x:Key).没有错误,但generic.xaml中定义的任何内容都没有出现.
我在这里做错了什么,或者关于如何允许在窗口上使用常见自定义样式的任何其他想法(即,不必在每个Window的xaml中定义样式) - 需要注意的是这不是应用?
尝试添加
Style={DynamicResource MyStyle}
在这种情况下,您不能使用StaticResource.
这听起来像是主题的工作.
将/themes/generic.xaml
ResourceDictionary 添加到项目中.
将以下内容添加到AssemblyInfo.cs: [assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)]
?
利润!
您添加到generic中的所有资源都将被所有控件使用.您还可以通过在themes
目录中包含具有正确主题名称的ResourceDictionary文件来制作配置文件特定主题(Luna,Aero等).
下面是更多信息的链接:创建和应用自定义主题