无法使用转换器加载资源字典

时间:2012-09-24 16:52:44

标签: wpf xaml converter resourcedictionary buildaction

所有事情都发生在同一个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”。从今天早上起,这让我发疯,仍然不知道到底发生了什么......

帮助。 谢谢。

2 个答案:

答案 0 :(得分:1)

Halelujah我把它弄出来了。我所要做的就是直接加载资源字典

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

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

\米/

答案 1 :(得分:0)

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

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

或者你可以在resourcedictionary中添加一个x:Class定义,并从程序集中实例化该类而不是加载xaml,并记得从构造函数中调用生成的InitializeComponent(),它将加载。

Is it possible to set code behind a resource dictionary in WPF for event handling?

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