Visual Studio Designer не находит и не отображает ресурсы, связанные с помощью словаря общих ресурсов. - PullRequest
0 голосов
/ 08 февраля 2019

Я реализовал словарь общих ресурсов, приложение скомпилировано и запущено без проблем, но 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]);
            }
        }
    }
}

Отредактировано:

Я обнаружил при этом ответе проблема вызвана

base.Source = value;

Я обернул его при попытке try, как предложено в ответе, а дизайнер непроблема отчета больше, но она не отображает представления.

Я частично исправил это, оборачивая свойство «Source» директивами препроцессора «Release», но если мне нужен тест памяти при отладке, я мог бы прокомментировать его.

Я также попробовал другой ответ , но импортируются только некоторые ресурсы, и я не понимаю, почему.

Отредактировано:

Я сообщил об этой проблеме в сообществе Visual Studio, но я исправил с помощью директив #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
}
...