0

一切都发生在同一个 VS 项目中。我有一个独立的资源字典文件。当我尝试以编程方式加载它时,我收到错误

“无法创建未知类型 '{clr-namespace:MyAssembly.Helpers}IsNullConverter”。

这是我加载它的方式:

StreamResourceInfo stream = Application.GetResourceStream(new Uri(@"MyAssembly;component/Resources/Resources.xaml", UriKind.Relative));

this.dynamicResources = XamlReader.Load(stream.Stream) as ResourceDictionary;

这是资源字典:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                    xmlns:helpers="clr-namespace:MyAssembly.Helpers">

<helpers:IsNullConverter x:Key="IsNullConverter" />

Styles go here...

请注意,它与代码隐藏文件相关联,但其中没有任何内容。资源文件的 Build-Action 设置为“Resource”。从今天早上开始,这让我发疯了,仍然不知道到底发生了什么……

帮助。谢谢你。

4

2 回答 2

1

哈利路亚,我猜出来了。我所要做的就是直接加载资源字典

Uri uri = new Uri(@MyAssembly;component/Resources/Resources.xaml", UriKind.Relative); this.dynamicResources.Source = uri;

并确保资源字典文件的 Build Action 设置为“Page”

\米/

于 2012-09-25T14:24:47.740 回答
0

您的项目是否引用了程序集?如果不尝试添加引用 - 如果您不想要依赖项,您可以尝试加载程序集:

http://www.dreamincode.net/forums/topic/78974-using-reflection-to-load-unreferenced-assemblies-at-runtime/

或者,您可以将 ax:Class 定义添加到资源字典,并从程序集中实例化类而不是加载 xaml,并记住从构造函数调用生成的 InitializeComponent(),它将加载。

是否可以在 WPF 中的资源字典后面设置代码以进行事件处理?

据我所见,如果 ResourceDictionary 和转换器与您从中加载的程序集中在同一个程序集中,您的示例将可以正常工作:)

于 2012-09-24T20:05:29.047 回答