Рассмотреть файл | Новый проект приложения WPF, содержащий:
- Новый пользовательский элемент управления с именем CustomControl1
- Два новых ресурсных словаря с именами 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: // application то я получу исключение XamlParseException, вызванное IOException "Не удается найти ресурс 'dictionary1.xaml" ", когда он пытается создать MainWindow.
Мой вопрос: Что особенного в generic.xaml относительно относительного разрешения URI и почему?