Ресурсы wpf: resourcedictionary вместе с xmlDataProvider - PullRequest
1 голос
/ 08 декабря 2011

У меня проблемы с использованием двух разных видов определений ресурсов в разделе ресурсов файла XAML:

Это выдает ошибку:

<Window.Resources>
    <XmlDataProvider x:Key="Maschinen">
        <x:XData xmlns="">
            <machines>
                <machine name="alte Maschine"/>
                <machine name="neue Maschine"/>
            </machines>
        </x:XData>
    </XmlDataProvider>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="ShinyRed.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>

и это также:

<Window.Resources>
    <XmlDataProvider x:Key="Maschinen">
        <x:XData xmlns="">
            <machines>
                <machine name="alte Maschine"/>
                <machine name="neue Maschine"/>
            </machines>
        </x:XData>
    </XmlDataProvider>

    <ResourceDictionary Source="ShinyRed.xaml"/>
</Window.Resources>

Кто-нибудь знает, что я должен делать, чтобы избежать сообщений об ошибках? Спасибо!

1 Ответ

1 голос
/ 09 декабря 2011

Любому объекту, помещенному в ResourceDictionary, должен быть присвоен ключ. Этот ключ используется WPF для извлечения объекта, либо неявно (например, через стиль по умолчанию), либо явно (например, через StaticResource, DynamicResource).

В приведенном выше примере вы создали ResourceDictionary без ключа, отсюда и ошибка. Синтаксис, который вы ищете:

<Window.Resources>
    <ResourceDictionary> <!-- Create a resource dictionary here -->
        <XmlDataProvider x:Key="Maschinen"> <!-- Put this into the dictionary -->
            <x:XData xmlns="">
                <machines>
                    <machine name="alte Maschine"/>
                    <machine name="neue Maschine"/>
                </machines>
            </x:XData>
        </XmlDataProvider>

        <ResourceDictionary.MergedDictionaries> <!-- Merge into this dictionary another dictionary ... -->
            <ResourceDictionary Source="ShinyRed.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>

Имейте в виду, что первый тег ResourceDictionary в приведенном выше фрагменте неявен, если вы его пропустите. В результате в ваших исходных примерах тег <ResourceDictionary> сам по себе определяет новый второй словарь (без ключа), который будет добавлен во внешний словарь.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...