C# XAML数据模板可以';t访问应用程序资源

C# XAML数据模板可以';t访问应用程序资源,c#,wpf,xaml,C#,Wpf,Xaml,恼人的XAML问题:我在资源字典文件中定义了一个DataTemplate,它必须访问App.Resources中定义为资源的转换器。从逻辑上讲,我应该将我的DataTemplate字典与App.Resources字典合并,应该就是这样。但是我得到一个异常,说找不到我的转换器资源。我错过什么了吗?推荐人?定义的顺序 更新: 这是我的App.Resources <ResourceDictionary> <!--Global Resources--> <B

恼人的XAML问题:我在资源字典文件中定义了一个DataTemplate,它必须访问App.Resources中定义为资源的转换器。从逻辑上讲,我应该将我的DataTemplate字典与App.Resources字典合并,应该就是这样。但是我得到一个异常,说找不到我的转换器资源。我错过什么了吗?推荐人?定义的顺序

更新: 这是我的App.Resources

<ResourceDictionary>
    <!--Global Resources-->
    <BooleanToVisibilityConverter x:Key="BoolToVis"/>
    <!--System Resources-->
    <sys:Boolean x:Key="True">True</sys:Boolean>
    <sys:Boolean x:Key="False">False</sys:Boolean>
    <!--Framework Resources-->
    <fr:EnumToBoolConverter x:Key="EnumToBool"/>
    <fr:EnumAttributeConverter x:Key="EnumToAttr"/>
    <fr:FileInfoConverter x:Key="ToFileInfo"/>
    <fr:ImageInfoConverter x:Key="ToImageInfo"/>
    <fr:UnitConverter x:Key="ToUnit"/>
    <fr:CommandParameterConverter x:Key="ToCmdParam"/>
    <!--Style Resources-->
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="pack://application:,,,/FrameworkUI;component/Styles/Dark3DStyles.xaml"/>
        <ResourceDictionary Source="/Resources/DataTemplates.xaml/>
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

真的
假的

您的问题是定义资源/数据模板的顺序以及合并词典的顺序

您正在将ResourceDictionary合并到App.Resources。因此,ResourceDictionary是最顶级的,必须拥有所有要运行的资源(键)。它不能使用派生的ResourceDictionary中定义的键

资源字典中移动转换器,然后查看结果

您已经在最后编写了合并字典代码,但这行不通。如果您看到编译后生成的代码的前景,那么资源必须按上述顺序排列

来自您的设计潜在客户的解决方案:

<ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="RD2.xaml"  />//Converter code
            <ResourceDictionary Source="RD.xaml"  /> //Template code            
</ResourceDictionary.MergedDictionaries>

//转换器代码
//模板代码

上述代码将起作用,因为转换器代码总是在模板代码之前生成。

否。路径=。不接受。克莱门斯,你说的一直对我有用,这就是为什么我觉得奇怪的原因,首先定义了转换器,然后定义了字典merged@GeysserSdz对不起,我没有一眼就看出来。我举了一个简单的例子来确定。在字典中使用转换器之前,必须先定义它。以前我不是说你在哪里写了合并字典语法。我指的是合并词典时的文件。因为合并字典代码将首先出现在资源部分中的任何其他代码之前。这就做到了,Kylo!愿原力与你同在!
<ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="RD2.xaml"  />//Converter code
            <ResourceDictionary Source="RD.xaml"  /> //Template code            
</ResourceDictionary.MergedDictionaries>