c# - Visual Studio 设计器未找到并呈现由共享资源字典链接的资源
问题描述
我已经实现了一个共享资源字典,该应用程序已编译并运行没有问题,但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
}
解决方案
推荐阅读
- bash - 如何在bash中使用多个ifs遍历多个目录?
- java - ByteBuddy 代理用另一个方法参数替换一个方法参数
- angular - 带有角度和微软 msal 的 acquireTokenSilent 因 AADB2C90077 / AADB2C90205 而失败
- kotlin - 如何在 Kotlin/JS 中使用 Javascript 库?
- python - 烧瓶静态css文件
- neo4j - 如何在节点子节点而不是其父节点上使用 ORDER BY 和 LIMIT?暗号
- google-analytics - 显示在 Google Analytics 中隐藏的原始链接
- dart - 找不到命令:pub,当 dart 已经在路径中时(macOS)
- javascript - Sinon:Assert a stub 是第一次以某种方式调用
- sql - SQL 中有没有一种方法可以跨行聚合列,并可能基于 Redshift 中的另一个字段值重复行?