使用XamlReader.Load加载时无法在ResourceDictionary中找到类型

时间:2010-10-29 13:17:14

标签: wpf

在我的prism模块中,我有以下代码片段:

        using (var manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MyAssembly.CaseHost.ViewModelDataTemplates.xaml"))
        {
            ParserContext context = new ParserContext();
            context.XmlnsDictionary.Add("local", "clr-namespace:MyAssembly.CaseHost");
            var resourceDictionary = (ResourceDictionary)XamlReader.Load(manifestResourceStream, context);
            _resourceRegistry.Add(resourceDictionary);
        }

我基本上是在尝试加载这个非常简单的ResourceDictionary:

<DataTemplate DataType="{x:Type local:PlayPauseViewModel}">
    <Label>Look mom!</Label>
</DataTemplate>

这给了我以下例外:

类型引用找不到名为“PlayPauseViewModel”的公共类型。

这是一个cpp / winforms / wpf应用程序的野兽,所以我不能使用URI。我怎么解决这个问题?

2 个答案:

答案 0 :(得分:3)

发现它!

问题是如何在DataTemplate中指定命名空间:

标准定义(不起作用):

xmlns:local="clr-namespace:<Namespace>"

更明确的定义(工作!)

xmlns:local="clr-namespace:<Namespace>;assembly=<assembly>"

替换&lt;&gt;使用命名空间和程序集。

答案 1 :(得分:2)

但是如果你在同一个程序集中有这个代码该怎么办? 您不能使用

xmlns:local="clr-namespace:<Namespace>;assembly=<assembly>"

有?