正如标题所说,我只想在代码后面获得ResourceDictionary
的x:Name
属性。
我的ResourceDictionary
:
<ResourceDictionary x:Name="DefaultLight"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
...
</ResourceDictionary>
我的应用程序.Xaml
<Application x:Class="WpfApp1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp1"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/MyLib;component/Resources/OutgoingResources.xaml"/>
<ResourceDictionary Source="/MyLib;component/Resources/Themes/DefaultDark.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
我的代码:
Console.WriteLine(Application.Current.Resources.MergedDictionaries[1].???);
2条答案
按热度按时间w80xi6nr1#
ResourceDictionary
没有由XAML处理器设置的Name
属性。您可以创建一个自定义类型,但添加一个
Name
属性:然后在XAML标记中设置属性:
...并通过将合并的资源字典强制转换为您的自定义类型来检索它:
e3bfsja22#
我不认为你会得到的名称回来,一旦它被合并。
但是,您可以找到资源字典的源代码:
适用于:
我得到
除了Dictionary1或Dictionary2,你当然可以将这些文件命名为DefaultLight.xaml、DefaultDark.xaml等。
如果您的目的只是查看合并了哪个主题资源字典,那么您可以“只”在每个字典中设置一个键来告诉您。
当然还有光源字典中的DefaultLight,使用相同的键。
如果你想给一堆资源字典起一个友好的名字,你可以定义一个列表来实现解耦。一个列表中包含name、url和IsLoaded bool的类。加载你在代码中选择的任何一个,并将其标记为已加载。