在Silverlight中使用ResourceDictionary时出错

时间:2010-01-08 02:51:35

标签: silverlight xaml silverlight-3.0

在我的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的构造函数。

导致此错误的原因是什么?我如何正确引用此资源?

2 个答案:

答案 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>