【问题标题】:ResourceDictionary can't find DataType for the DataTemplateResourceDictionary 找不到 DataTemplate 的 DataType
【发布时间】:2016-03-26 20:32:18
【问题描述】:

我必须将我的 DataTemplates 外包给 ResourceDictionary。一切正常,除了检测 DataTemplates 的 DataTypes。

为了获取 ResourceDictionary,我编写了以下函数:

public static ResourceDictionary ParseResourceDictionary(String path)
{
        System.Windows.ResourceDictionary templates = new System.Windows.ResourceDictionary();
        templates = new System.Windows.ResourceDictionary() { Source = new System.Uri(path) };
        return templates;
}

我的 ResourceDictionary 看起来像这样:

<ResourceDictionary 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:classes="clr-namespace:ResourceDictTest;assembly=ResourceDictTest"
>

<DataTemplate DataType="{x:Type classes:Company}">
    <TextBlock Text="{Binding Name}"/>
</DataTemplate>

如果我通过我的函数获取字典,我得到了异常,即 在类中找不到 DataType "Company",但是当我写 "classes:" 时,Company 会得到建议,所以命名空间一点都没有错。

错误消息是这样的(不是我的母语):

找不到名为“Company”的公共类型。

是的,“公司”类设置为公开。

在此之前,我尝试过:

xmlns:classes="clr-namespace:ResourceDictTest"

而不是这个:

xmlns:classes="clr-namespace:ResourceDictTest;assembly=ResourceDictTest"

收到消息,从“classes:Company”创建类型时出错。

谁能给我一个提示?

【问题讨论】:

    标签: c# xaml binding namespaces resourcedictionary


    【解决方案1】:

    您是否尝试过通过 XAML 获取 ResourceDictionary?

    <Application.Resources>
        <ResourceDictionary Source="Resources/ResourceDictTest.xaml" />
    </Application.Resources>
    

    【讨论】:

    • 我没有。我是否必须将整个路径添加到源代码中?像 C:\Users\...\ResourceDictTest.xaml?我这样尝试过,错误仍然存​​在。我真的不知道怎么了。
    • 您必须将其设置为相对于项目根目录。
    • 所以如果我的项目被称为“ResourceDictTest”,我必须把 ResourceDictionary 放在 \ResourceDictTest 中吗?我有另一个名为“Templates”的文件夹,所以我的路径是这样的:C:\Users\...\ResourceDictTest\Templates\ResourceDictText.xaml。我不知道你到底是什么意思。这不是我的母语。 €dit:我现在尝试了 Templates\ResourceDict.Text.xaml,但它仍然无法正常工作。
    • 是的,如果您在“App.xaml”中包含字典,则“Templates/ResourceDict.Text.xaml”应该是正确的。对于您的另一个问题:您的 Company 类在哪个命名空间中?您是否尝试过清理解决方案并重新构建?
    • 谢谢伊恩!如您所说,我已在 App.xaml 中添加了字典,但仍然出现错误。然后我尝试通过“App.Current.Resources as ResourceDictionary”获取字典,而不是用我的函数解析它。现在一切都可以毫无问题地加载!我赞成你的回答,但我现在没有特权。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2019-05-27
    • 2021-03-30
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多