在我的Silverlight应用程序中,我有UserControl,我想在ResourceDictionary中引用一个单独的XAML文件中的StaticResource。
我的UserControl如下所示:
<UserControl x:Class="ResourceDictionaryHeadache.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
<UserControl.Resources>
<ResourceDictionary Source="/SampleData.xaml" />
</UserControl.Resources>
<Grid x:Name="LayoutRoot">
<ListBox HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
ItemsSource="{StaticResource SampleData}">
</ListBox>
</Grid>
</UserControl>
我的SampleData.xaml文件如下所示:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Headache="clr-namespace:ResourceDictionaryHeadache">
<Headache:PersonList x:Key="SampleData">
<Headache:Person Name="Joe" Age="20" />
<Headache:Person Name="Sam" Age="25" />
<Headache:Person Name="Dave" Age="30" />
</Headache:PersonList>
我将SampleData.xaml文件设置为内容的构建操作,当我运行应用程序时,我在InitializeComponent()行上得到AG_E_PARSER_BAD_TYPE [Line:5 Position:44]错误我的UserControl的构造函数。
导致此错误的原因是什么?我如何正确引用此资源?
答案 0 :(得分:4)
将Build Action设置为Resource,然后如下所示引用它:
<ResourceDictionary Source="/AssemblyName;component/sampledata.xaml" />
确保从组件开始以小写形式全部以小写形式表示它是如何在dll的资源中结束的。
答案 1 :(得分:2)
资源词典中的这一行对我来说不合适: -
xmlns:Headache="clr-namespace:ResourceDictionaryHeadache"
您的PersonList
类是否真的在名为ResourceDictionaryHeadache
的命名空间中定义了?
我是否怀疑代码失败的原因是因为XAML无法找到PersonList
类型。
修改
D'哦!我只是注意到,从Source
中删除前面的/并将SampleData.xaml资源字典保留为其默认的“页面”构建操作。
换句话说,如果您刚刚使用“添加新项目”添加XAML文件,那么“资源词典”只需要在页面xaml中添加: -
<UserControl.Resources>
<ResourceDictionary Source="SampleData.xaml" />
</UserControl.Resources>