WPF资源字典在Excel加载项
我一直在寻找一段时间,仍然没有接近解决scheme。 这是我的情况:
我正在创build一个Excel插件,并希望使用WPF使它看起来更好一点。 本地(据我所知)Addins必须是WinForm。 我开始使用WPF元素托pipe,但重组不是很好。 然后,我发现添加一个WPF项目的解决scheme是伟大的,但现在我想要使用资源字典保持forms看起来相同,并减less内联样式。 我只是不能让合并的字典工作。
我试过包URI和;组件/ …..但都没有工作。
我究竟做错了什么?
– – – -编辑 – – – –
我有一个名为SolutionA的Excel插件解决scheme该解决scheme包含3个项目:
ProjectA是一个Excel Addin项目,它具有对ProjectB和ProjectC的引用
ProjectB是一个WPF项目,它引用了ProjectC
包含资源字典的ProjectC
只需要知道如何从ProjectB中引用资源字典
请查看MSDN上的Windows Presentation Foundation页面中的Pack URI 。
基本上,你想要的东西有点像这样:
<ResourceDictionary Source= "pack://application:,,,/AssemblyName;component/FolderName/DictionaryName.xaml" />
您将需要将AssemblyName
更改为您的资源文件所在的程序集的名称,将FolderName
更改为您的资源文件所在的任何文件夹的名称,然后将DictionaryName
更改为资源文件的名称。 基本上,这只是资源文件的相对path。
我正在开发使用WPF控件和MahApps样式的Excel文档自定义。 一切工作正常我的虚拟化开发框使用Excel 2013和物理Excel 2010框(都有VS2012)。
在运行Excel 2010或Excel 2013的其他虚拟化框中,样式不起作用。 这是运行完全相同的代码时。
这与此处和本文中报告的问题类似。
如果对你有帮助,我会分享我的发现。 从各种testing看来,如果MahApp资源被放置在UserControl或Window中,它们就可以工作。 但是将它们放在我自己的资源字典中并在用户控件中加载该字典不起作用。
例如这个工程
<ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colours.xaml" /> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" /> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" /> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" /> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary>
但
<ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,,,/IressWorkbook;component/Assets/MyTheme.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary>
不,MyTheme包含的地方
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:System="clr-namespace:System;assembly=mscorlib"> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colours.xaml" /> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" /> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" /> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" /> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary>
我试图找出工作机器和不工作机器之间的区别。
问候Alan