2011-09-15 3 views
1

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

+0

Попробуйте, что один: http://stackoverflow.com/questions/538750/can-i-get-the-key-of-a-style-in-code-behind-wpf –

ответ

0

Это хороший вопрос (+1).

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

Если вы хотите поддерживать/отслеживать состояние кнопки, это должно быть обработано как визуальные состояния, так и в вашем коде позади (ViewModel/Model).

0

См: Style

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

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

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

1

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

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

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

+0

button.style возвращается стиль, а не название стиля! – Max

+0

Почему стиль носит имя? Он должен иметь ключ, если это возможно. В случае, если вы хотите узнать имя, попробуйте свойство Style.Name. Но стили или другие ресурсы обычно содержат «ключ». Этот «ключ» может быть строковым именем или может быть объектом типа, например. BasedOn = "{StaticResource {x: Type TextBox}}" является одним из таких ключей стиля, который является типом TextBox, т.е. глобальным стилем, применяемым ко всем текстовым полям. –

+0

да! u верно! – Max

1

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

0

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

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; 
     } 
Смежные вопросы