Я могу получить ключ стиля в коде - позади? (WPF)

Заимствовано из https://stackoverflow.com/a/50863128/1264360

Try,

 location /control-panel {
    root /var/www/html/soundoff-admin-dev/dist;
    try_files $uri $uri/ /control-panel/index.html;
 }

12
задан Dave Clemmer 15 August 2011 в 18:05
поделиться

4 ответа

Я создал маленький класс помощника с отдельным методом сделать обратный поиск, которого Вы требуете.

public static class ResourceHelper
{
    static public string FindNameFromResource(ResourceDictionary dictionary, object resourceItem)
    {
        foreach (object key in dictionary.Keys)
        {
            if (dictionary[key] == resourceItem)
            {
                return key.ToString();
            }
        }

        return null;
    }
}

можно назвать его с помощью следующего

string name = ResourceHelper.FindNameFromResource(this.Resources, defaultStyle);

Каждый FrameworkElement имеет свой собственный .Resources словарь, с помощью 'этого' предполагает, что Вы находитесь в правильном месте для того, где MyTestStyle определяется. Если потребности - Вы, могло бы добавить больше методов к статическому классу для рекурсивного пересечения всех словарей в окне (приложение?)

12
ответ дан 2 December 2019 в 19:56
поделиться

Вероятно, не используя Объект стиля, но если Вы обходите агитацию в ResourceDictionary, содержащем Ваш стиль, можно получить x:Key.

1
ответ дан 2 December 2019 в 19:56
поделиться

Не ища словари ресурса, я не думаю, что это возможно, поскольку x:Key является частью грамматики разметки XAML и не имеет никакой уместности, когда у Вас есть ссылка на Стиль или DataTemplate или что-либо, что Вы получили.

Взгляните на документ MSDN о x:Key

1
ответ дан 2 December 2019 в 19:56
поделиться

Мне пришлось немного изменить приведенный выше пример, чтобы заставить его работать для меня, поскольку я использую MergedDictionaries. Если приведенный выше пример дает 0 результатов, попробуйте следующее:

  //Called by FindNameFromResource(aControl.Style) 
    static public string FindNameFromResource(object resourceItem) 
    {

        foreach (ResourceDictionary dictionary in App.Current.Resources.MergedDictionaries)
        {
            foreach (object key in dictionary.Keys)
            {
                if (dictionary[key] == resourceItem)
                {
                    return key.ToString();
                }
            }
        }
        return null;
    }
3
ответ дан 2 December 2019 в 19:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: