Конструктор VS2010 не работает, когда ResourceDictionary находится во вложенной папке

#c# #wpf #visual-studio-2010 #xaml #resourcedictionary

#c# #wpf #visual-studio-2010 #xaml #resourcedictionary

Вопрос:

У меня есть проект, который содержит точку входа моего приложения и ResourceDictionary. В первый раз эти файлы были расположены в корне проекта. В это время я мог видеть все компоненты (кнопка для примера), измененные стилем в конструкторе файлов xaml в других проектах.

Теперь у меня есть вложенные папки, подобные этой: src / launcher, которая содержит мою точку входа, и src / styles, которая содержит мой ResourceDictionary. Но теперь компоненты не оформлены в конструкторе VS2010. Программа компилируется и работает хорошо, но конструктор не работает. Я постоянно получаю ошибку «Не удается найти ресурс …». Код моего основного файла xaml :

 <Application x:Class="MANAGER.Program"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             Startup="Application_Startup">
    <Application.Resources>
        <ResourceDictionary Source="../Styles/Style.xaml"></ResourceDictionary>
    </Application.Resources>
</Application>
  

Почему конструктор не работает?

Ответ №1:

Ваш код должен выглядеть таким образом, чтобы использовать подкаталоги из корневого каталога вашего приложения:

 <Application x:Class="MANAGER.Program"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             Startup="Application_Startup">
    <Application.Resources>
        <ResourceDictionary Source="pack://siteoforigin:,,,../Styles/Style.xaml"></ResourceDictionary>
    </Application.Resources>
</Application>
  

Ответ №2:

Это может быть как-то связано с форматом атрибута «Source». Формат должен быть URI пакета, например «pack://siteoforigin:,,,/SiteOfOriginFile.xaml»

Взгляните на эти документы в MSDN:

Комментарии:

1. Я пробовал «Source=»pack://siteoforigin:,,,/src/style/style.xaml», но программа не запускается. В начале строки есть исключение. Я тоже пробовал «Source=»pack://application:,,,/src/style/style.xaml». Программа запущена, но у меня та же проблема, что и в вопросе

2. То, что WPF интерпретирует как каталог siteOfOrigin, зависит от того, какое приложение у вас есть (автономное, один раз закрытое, …). Получите отладочный вывод интерпретируемого пути siteOfOrigin и сравните его с вашей реальной структурой папки в файловой системе и посмотрите, действительно ли он ищет файл там, где вы его ожидаете. Также, пожалуйста, проверьте, нужно ли добавить дополнительный UriKind ( msdn.microsoft.com/de-de/library/system.urikind.aspx ) параметр для различения абсолютного и относительного путей. Работает ли он с полным абсолютным путем?