当前位置:  开发笔记 > 编程语言 > 正文

WPF类库中的程序集范围/根级别样式

如何解决《WPF类库中的程序集范围/根级别样式》经验,为你挑选了2个好方法。

我有一个支持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中定义样式) - 需要注意的是这不是应用?



1> Jab..:

尝试添加

Style={DynamicResource MyStyle}

在这种情况下,您不能使用StaticResource.



2> Cameron MacF..:

这听起来像是主题的工作.

    /themes/generic.xamlResourceDictionary 添加到项目中.

    将以下内容添加到AssemblyInfo.cs: [assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)]

    利润!

您添加到generic中的所有资源都将被所有控件使用.您还可以通过在themes目录中包含具有正确主题名称的ResourceDictionary文件来制作配置文件特定主题(Luna,Aero等).

下面是更多信息的链接:创建和应用自定义主题

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有