Visual Studio设计器找不到并呈现通过“共享资源字典”链接的资源

时间:2019-02-08 12:18:59

标签: c# wpf xaml visual-studio-2017 xaml-designer

我已经实现了“共享资源字典”,该应用程序已编译并可以正常运行,但是 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
}

0 个答案:

没有答案