wpf通过ResourceDictionary访问第三方主题和皮肤

6 浏览
0 Comments

wpf通过ResourceDictionary访问第三方主题和皮肤

我正在创建一个用于Revit的WPF插件。为此,我想使用一些第三方控件来提供额外的UI功能和样式(请参见ModernWpf)。

在“普通”的WPF应用程序中,一切都正常工作:我添加了库(nuget),并将主题资源添加到app.xaml的ResourceDictionary.MergedDictionaries中。

例如,在页面中添加一个DropDownButton控件并运行WPF应用程序,结果是一个工作和有样式的DropDownButton。

在我的Revit插件中,这种方法不起作用。由于没有app.xaml,我尝试在不同的地方添加资源(窗口、页面、用户控件、我的主题资源MainTheme.xaml等)。控件本身显示出来,并且下拉操作有效,但没有样式。

ModernWpf.dll和ModernWpf.Controls.dll被复制到Revit插件文件夹中,这些dll文件包含资源(使用DotPeek可见),所以这些资源应该以某种方式可用。

我错过了什么/如何修复这个问题?

提前感谢您的帮助,Michel

0
0 Comments

在Revit插件中,由于它是一个类库而不是一个真正的WPF应用程序,所以没有app.xaml文件,也没有程序集范围的资源。为了解决这个问题,可以参考以下方法:

1. 创建一个名为"Resources.xaml"的XAML文件,用于放置全局资源。

2. 在"Resources.xaml"中定义全局资源。

3. 创建一个名为SingletonResources的类,继承自ResourceDictionary,并将其代码替换为上述提供的代码段。

4. 在需要访问"Resources.xaml"的每个控件中,将SingletonResources包含在控件的资源中。

5. 现在可以在窗口中访问"Resources.xaml"中的所有资源。

6. 注意:如果需要为控件创建本地资源,并且已经定义了SingletonResources,则需要将本地资源定义在SingletonResources标记内。

需要注意的是,IDE自动完成资源键的功能将不起作用。

通过上述方法,可以在Revit插件中访问第三方主题和皮肤的资源。

0