在这里再添加另一个答案,以防您没有视图或Application.Current
为空。 我意识到这可能不常见,但在我的情况下,我有一个针对父应用程序的插件,并且Application.Current
为空; 我还想将我的资源之一作为ImageSource
传递给父级,因此我没有创建XAML视图直接获取资源。
您还可以将字典转换为可在代码后台创建的对象。只需在XAML中设置x:Class
属性,然后在代码后台中创建一个.xaml.cs
文件。您更新的XAML(我们将其称为MyDictionary.xaml
)看起来将类似于以下内容:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
x:Class="Some.Namespace.MyDictionary"
mc:Ignorable="d">
...Resources...
</ResourceDictionary>
而代码背后(MyDictionary.xaml.cs
)看起来会像这样:
using System.Windows;
namespace Some.Namespace
{
public partial class MyDictionary : ResourceDictionary
{
public MyDictionary()
{
InitializeComponent();
}
}
}
不要忘记调用InitializeComponent()
,因为这是加载资源的方法。实际上并不需要抱歉,见下面的编辑说明
在这样做之后,您可以在代码的任何地方构造类的实例,并通过键引用资源,如下所示:
var dictionary = new MyDictionary();
var resource = dictionary["whateverKey"] as WhateverResourceType;
感谢这篇文章给了我灵感。
编辑
使用这种设置时,我遇到了一个潜在的问题。我的一些控件会出现“无法重新初始化ResourceDictionary实例”的异常。经过进一步研究,发现这可能与在构造函数中调用InitializeComponent
有关。因此,我从代码后台中删除了构造函数,并添加了一个静态方法来获取已初始化的实例,如下所示:
public static MyDictionary ConstructInitializedInstance()
{
var dictionary = new MyDictionary();
dictionary.InitializeComponent();
return dictionary;
}
你也可以在代码后台创建并初始化。
";component/Styles/Icons.xaml"
就足够了。 - Shahin Dohan";component/"
指向您项目文件结构的根目录(在此示例中为当前程序集)。 - j00hinew Uri("/DllName;component/App/Views/aGeneralResources/StatusBadges.xaml, UriKind.RelativeOrAbsolute);
- Jason Masters