Почему для объединенных словарей в Generic.xaml требуются абсолютные uri?

Рассмотрим файл | Новый проект приложения WPF, который содержит:

  1. Новый настраиваемый элемент управления с именем CustomControl1
  2. Два новых словаря ресурсов с именами Dictionary1 и Dictionary2

Возьмите сгенерированный стиль из Generic.xaml и переместите его в Dictionary2. Затем объедините Dictionary2 с Dictionary1 и Dictionary1 с Generic следующим образом:

<!--Generic.xaml-->
<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="pack://application:,,,/Themes/Dictionary1.xaml"/>
</ResourceDictionary.MergedDictionaries>

<!--Dictionary1.xaml-->
<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="Dictionary2.xaml"/>
</ResourceDictionary.MergedDictionaries>

Затем добавьте экземпляр CustomControl1 в сетку MainWindow. (Эта часть необходима для воспроизведения проблемы. Проект всегда компилируется нормально - проблема проявляется только во время выполнения, и на словари должны быть ссылки.)

В Dictionary1.xaml я сливаю другой dict в той же папке , поэтому работает простой Source = "Dictionary2.xaml". Однако в Generic.xaml я должен использовать абсолютный URI. Если я изменю приведенное выше значение на Source = "Dictionary1.xaml" без материала приложения pack: //, тогда я получу исключение XamlParseException, вызванное IOException «Не удается найти ресурс« dictionary1.xaml »», когда он пытается создать MainWindow.

Мой вопрос: Что особенного в generic.xaml относительно относительного разрешения URI и почему?

10
задан scobi 29 September 2010 в 16:51
поделиться