我希望我的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:&#34;从本地文本创建一个Type:MainWindow失败&#34;。
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
在几个线程中,人们建议添加&#34; assembly =&#34;到松散的XAML顶部的xmlns。如果我这样做,XAML文件本身不再构建。
Error: 'Cannot create unknown type '{clr-namespace:NameSpace.Properties}Settings'.'
这里有人建议将XAML的构建操作设置为&#39; page&#39;但我的XAML文件就是这种情况......
我对编程很陌生,我的理解非常有限,但我通常能够通过浏览网页解决问题。不过这次不是。
我认为由于我缺乏理解,我必须找到一些微不足道的东西。或者我是以一种完全错误的方式处理我的原始问题(让用户在2种风格中选择)?
答案 0 :(得分:2)
如果您要在运行时加载Xaml文件,则不需要编译它。尝试将构建操作更改为“资源”,然后将assembly=
限定符添加到命名空间导入中,如linked answer建议的那样。
或者,将Xaml文件构建为“Page”,但为其指定一个类名,以便可以使用构造函数对其进行实例化:
<ResourceDictionary x:Class="Practicum21_Ben_Vandenberk.AlternateResources"
...>
App.Current.Resources.MergedDictionaries.Add(new AlternateResources());
如果你走这条路,你不需要添加assembly=
限定符。