我已经实现了一个共享资源字典,该应用程序已编译并运行没有问题,但XAML 设计器不会通过它呈现喜欢的资源。
设计器报告了“源”属性的以下问题:
无法创建未知类型 {clr-namespace:[namespaces'object...]}.SharedResourceDictionary
我试图移动到另一个命名空间,“应用程序根”并将属性体面添加到源字段。
我正在使用 WPF 框架、C#、Visual Studio 2017 版本 15.9.5
我忘记了要反对的事情吗?
SharedResourceDictionarys 的代码如下:
public class SharedResourceDictionary : ResourceDictionary
{
private Uri _sourceUri;
private static readonly Dictionary<Uri, ResourceDictionary> SharedDictionaries = new Dictionary<Uri, ResourceDictionary>();
public new Uri Source
{
get => _sourceUri;
set
{
_sourceUri = value;
if (!SharedDictionaries.ContainsKey(value))
{
base.Source = value;
SharedDictionaries.Add(value, this);
}
else
{
MergedDictionaries.Add(SharedDictionaries[value]);
}
}
}
}
编辑:
我在这个答案中发现问题是由
base.Source = 价值;
我已经按照答案的建议将它包装在 try catch 中,并且设计器不再报告问题,但它不会呈现视图。
我已经部分修复了它用预处理器指令“Release”包装“Source”属性,但我是否需要在调试中进行内存测试我可以评论它。
我也尝试了另一个答案,但只导入了一些资源,我不明白为什么。
编辑:
我已经在 Visual Studio Community 上报告了这个问题,但我已经修复了 #debug 和 #release 指令,如下例所示
public class SharedResourceDictionary : ResourceDictionary
{
#if RELEASE
private Uri _sourceUri;
private static readonly Dictionary<Uri, ResourceDictionary> SharedDictionaries =
new Dictionary<Uri, ResourceDictionary>();
public new Uri Source
{
get => _sourceUri;
set
{
_sourceUri = value;
if (!SharedDictionaries.ContainsKey(value))
{
base.Source = value;
SharedDictionaries.Add(value, this);
}
else
{
MergedDictionaries.Add(SharedDictionaries[value]);
}
}
}
#endif
}