Ошибка использования ResourceDictionary в Silverlight - PullRequest
3 голосов
/ 08 января 2010

В моем приложении Silverlight у меня есть UserControl, и я хочу сослаться на StaticResource в ResourceDictionary, который находится в отдельном файле XAML.

Мой 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 установлено Действие построения Содержимое , и при запуске приложения я получаю ошибку AG_E_PARSER_BAD_TYPE [Строка: 5 Позиция: 44] в строке InitializeComponent () конструктор для моего UserControl.

Что является причиной этой ошибки и как я могу правильно ссылаться на этот ресурс?

Ответы [ 2 ]

4 голосов
/ 08 января 2010

Установите для параметра «Сборка» значение «Ресурс», а затем укажите его, как показано ниже:

<ResourceDictionary Source="/AssemblyName;component/sampledata.xaml" />

убедитесь, что все это в нижнем регистре от компонента и далее, так как это заканчивается в ресурсах библиотеки DLL.

2 голосов
/ 08 января 2010

Эта строка в вашем словаре ресурсов мне не подходит: -

 xmlns:Headache="clr-namespace:ResourceDictionaryHeadache"

Действительно ли ваш PersonList класс определен в пространстве имен с именем ResourceDictionaryHeadache?

Я подозреваю, что причиной сбоя кода является то, что XAML не может найти тип PersonList.

Редактировать

D'Oh! Я только что заметил, удалите предыдущий / из Source и оставьте словарь ресурсов SampleData.xaml с его действием по умолчанию «Страница».

Другими словами, если вы только что добавили XAML-файл, используя «Добавить новый элемент», то «Ресурсный словарь», вам нужно это только на своей странице

<UserControl.Resources> 
    <ResourceDictionary Source="SampleData.xaml" /> 
</UserControl.Resources>
...