XAMLParseException при загрузке свободного стиля XAML в той же сборке: не удалось создать тип
Я бы хотел, чтобы пользователь моего приложения WPF мог выбирать между двумя стилями: стилем WPF по умолчанию и моим собственным стилем. Я сделал Resource Dictionary, который включает в себя все элементы стиля пользовательского стиля. Словарь ресурсов находится в том же проекте.
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Practicum21_Ben_Vandenberk">
...
<Style TargetType="Window">
<Setter Property="Background" Value="Black"></Setter>
</Style>
<Style TargetType="{x:Type local:MainWindow}" BasedOn="{StaticResource {x:Type Window}}"/>
<Style TargetType="{x:Type local:BestellingDetail}" BasedOn="{StaticResource {x:Type Window}}"/>
<Style TargetType="{x:Type local:CategorieDetail}" BasedOn="{StaticResource {x:Type Window}}"/>
<Style TargetType="{x:Type local:KlantDetail}" BasedOn="{StaticResource {x:Type Window}}"/>
<Style TargetType="{x:Type local:LeverancierDetail}" BasedOn="{StaticResource {x:Type Window}}"/>
<Style TargetType="{x:Type local:ProduktDetail}" BasedOn="{StaticResource {x:Type Window}}"/>
<Style TargetType="{x:Type local:WerknemerDetail}" BasedOn="{StaticResource {x:Type Window}}"/>
Когда я пытаюсь загрузить этот словарь в App.Current.Resources, используя следующий код, я получаю исключение XAMLParseException: "создание типа из текста local:MainWindow failed".
ResourceDictionary dic = new ResourceDictionary();
dic.Source = new Uri(path, UriKind.Absolute);
App.Current.Resources.MergedDictionaries.Clear();
App.Current.Resources.MergedDictionaries.Add(dic);
Я искал более двух часов.
WPF Loose XAML ResourceDictionary
В нескольких потоках люди предлагают добавить "assembly=" в xmlns в верхней части свободного XAML. Если я сделаю это, сам файл XAML больше не будет собираться.
Ошибка: "Невозможно создать неизвестный тип" {clr-namespace:NameSpace.Properties}Settings ". '
Здесь люди предложили установить действие сборки XAML на "page", но это уже имело место для моего файла XAML...
Я довольно плохо знаком с программированием, и мое понимание довольно ограничено, но я обычно могу решать проблемы, просматривая веб-страницы. Не в этот раз, хотя.
Я считаю, что это должно быть что-то тривиальное, что я не могу найти из-за моего непонимания. Или я решаю свою первоначальную проблему (позволяя пользователю выбирать между двумя стилями) совершенно неверным образом?
1 ответ
Если вы собираетесь загружать файл Xaml во время выполнения, вам не нужно его компилировать. Попробуйте изменить действие сборки на "Ресурс", затем добавьте assembly=
квалификаторы для импорта вашего пространства имен, как предполагает связанный ответ.
Либо создайте файл Xaml как "Страница", но присвойте ему имя класса, чтобы вы могли создать его экземпляр с помощью конструктора:
<ResourceDictionary x:Class="Practicum21_Ben_Vandenberk.AlternateResources"
...>
App.Current.Resources.MergedDictionaries.Add(new AlternateResources());
Если вы идете по этому пути, вам не нужно добавлять assembly=
классификаторы.