我已经实现了“共享资源字典”,该应用程序已编译并可以正常运行,但是 XAML设计器不会通过其呈现喜欢的资源。
设计器报告“ Source”属性的以下问题:
无法创建未知类型{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]);
}
}
}
}
已编辑:
我在此answer发现了问题是由
引起的base.Source =值;
我已经按照答案的建议将其包裹起来,设计者不再报告问题,但是它不呈现视图。
我已经部分修复了使用预处理器指令“ Release”包装“ Source”属性的问题,但是我是否需要在调试中进行内存测试,我可以对其进行注释。
我也尝试了另一个answer,但仅导入了一些资源,我不明白为什么。
已编辑:
我已经在Visual Studio社区上报告了this issue,但已通过#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
}