在同一程序集中加载松散样式的XAML时出现XAMLParseException:创建类型失败
本文关键字:XAML XAMLParseException 失败 类型 创建 样式 程序 程序集 集中 加载 | 更新日期: 2023-09-27 18:03:41
我希望我的WPF应用程序的用户能够在两种样式之间进行选择:默认的WPF样式和我自己的自定义样式。我已经制作了一个资源字典,其中包括自定义样式的所有样式元素。资源字典位于同一个项目中。
<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创建类型失败"。
ResourceDictionary dic = new ResourceDictionary();
dic.Source = new Uri(path, UriKind.Absolute);
App.Current.Resources.MergedDictionaries.Clear();
App.Current.Resources.MergedDictionaries.Add(dic);
我已经找了两个多小时了。WPF松散XAML资源字典
在一些线程中,人们建议在松散XAML顶部的xmlns中添加"assembly="。如果我这样做,XAML文件本身将不再构建。
错误:'不能创建未知类型'{clr-namespace: namspace . properties}Settings'
这里有人建议将XAML的构建动作设置为'page',但这已经是我的XAML文件的情况…
我对编程很陌生,我的理解也很有限,但我通常可以通过浏览网页来解决问题。但这次没有。
我想它一定是一些微不足道的东西,我找不到,因为我缺乏理解。或者我是否以一种完全错误的方式解决了我最初的问题(让用户在两种风格之间进行选择)?
如果要在运行时加载Xaml文件,则不需要编译它。尝试将构建操作更改为'Resource',然后将assembly=
限定符添加到您的命名空间导入,如链接答案所建议的。
或者,将Xaml文件构建为'Page',但给它一个类名,以便您可以使用构造函数实例化它:
<ResourceDictionary x:Class="Practicum21_Ben_Vandenberk.AlternateResources"
...>
App.Current.Resources.MergedDictionaries.Add(new AlternateResources());
如果你走那条路,你不需要添加assembly=
限定符