Получить название стиля кнопки - PullRequest
1 голос
/ 15 сентября 2011

У меня есть несколько стилей для Window.Resources, которые я применяю к нескольким кнопкам с C #.Затем мне нужно изменить стиль, но сначала мне нужно знать, какой стиль применяется к кнопке, которую я хочу изменить.Я не могу найти способ получить название стиля с помощью кнопки!

Ответы [ 6 ]

1 голос
/ 15 сентября 2011

Я думаю, что вы делаете ошибку с точки зрения дизайна / архитектуры, если подходите к своей проблеме таким образом. Если вам нужно изменить стили условно, вы можете создавать элементы пользовательского интерфейса на основе объектов, которые содержат соответствующую информацию, используя привязку данных и шаблонизацию .

1 голос
/ 15 сентября 2011

Вы пробовали Button.Style собственность?Если установка стиля explcit выполняется с использованием ресурса Key, тогда вы должны получить текущий стиль кнопки, используя Button.Style propetry, в противном случае будет немного сложно собрать всю информацию, связанную с Style, на уровне управления.

И для этого есть причины.Стили наследуются и могут быть переопределены в различных элементных областях, таких как App, Window, UserControl, Ancestor UIElements и, наконец, индивидуальный элемент управления.Поэтому, когда вы обращаетесь к свойству Button.Style, вы получаете стиль, который был последним непосредственным стилем, примененным к Button.Если стиль BasedOn другой Style, то Style.BasedOn даст вам родителя / базу Style.Опять же, если этот стиль BasedOn получен из другого Style, мы получим его как Style.basedOn.BasedOn ... и т. Д.

Надеюсь, это имеет смысл.:-)

0 голосов
/ 23 марта 2019

@ Макс, Я новичок в WPF, и мне пришлось переключать стиль моего объекта Border между одним из двух известных стилей, которые он может иметь. Вместо того, чтобы использовать линейный поиск в FindNameFromResource, я вместо этого сделал это ...

Style normal = (Style)this.Resources["NormalBorder"];
Style strong = (Style)this.Resources["StrongBorder"];
border.Style = border.Style == normal ? strong : normal;
0 голосов
/ 15 сентября 2011

Спасибо за ваши ответы, я использую эту функцию из другого стекового потока ... она работает и возвращает имя стиля в строку!

static public string FindNameFromResource(ResourceDictionary dictionary, object resourceItem)

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

            return null;
        }
0 голосов
/ 15 сентября 2011

См .: Стиль

public void FooFunc()
{
    Button myButton = ...;

    Console.WriteLine("The Style: {0}", myButton.Style);
}

Я думаю, это то, что вы ищете?

0 голосов
/ 15 сентября 2011

Хороший вопрос (+1).

Это только моя мысль, которая может быть не очень точной.Я сомневаюсь, имеет ли смысл получить стиль для управления пользовательским интерфейсом.Предположим, что вы применяете стиль «style1» к элементу управления пользовательского интерфейса, а затем вы можете установить отдельные атрибуты, такие как передний план / фон .... Теперь, каким будет стиль?кнопка, которая должна обрабатываться как визуальное состояние или в вашем коде позади (ViewModel / Model), вероятно.

...