首页 > 解决方案 > 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
}

标签: c#wpfxamlvisual-studio-2017xaml-designer

解决方案


推荐阅读