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