Получение определенного установщика объекта стиля - PullRequest
0 голосов
/ 08 января 2012

Мне было интересно, как получить конкретный сеттер из объекта стиля в программном коде в silverlight.

У меня есть стиль S, который корректно загружается и применяется к некоторому объекту.Затем во время выполнения я хочу изменить один конкретный установщик этого стиля , скажем, его установщик фона (Конечно, я хочу изменить значение одного конкретного установщика).

Для этого яПосмотрел коллекцию Setters , которая имеет тип SetterBaseCollection и содержит все сеттеры этого стиля.Все идет нормально.Кажется, что эта коллекция включает все сеттеры, как они определены в XAML, но как мне получить к ним доступ?

Когда я перебираю эту коллекцию, я имею дело с объектами типа "Сеттер".Но я не знаю, как выбрать тот, который содержит свойство «Background».

// this works totally fine; the variable myStyle is getting the correct Style
myStyle = this.Resources["myStyle"] as Style;

// the myStyle.Setters collection seems to contain all setters of the style
foreach (Setter s in myStyle.Setters) {

   // so now what to do to get the setter that sets the Background property of my style ??

  // my naive approach did not work:
  if (s.Property.ToString().equals("Background")) {

      // do something
  }
}

(Объекты Setter имеют атрибут Name, который фактически является тем, что я хочу выполнить для сравнениясо строкой «Background» - и отладка предложила, чтобы этот атрибут действительно содержал строку «Background» ... Но это непубличный атрибут!

Было бы замечательно , если кто-нибудьбудет иметь какие-либо предложения :)

ps Мое местное время - 03:00, поэтому я немного устал и перегружен работой - поэтому, пожалуйста, попросите меня еще раз уточнить мою проблему в случаеу тебя проблемы с угадыванием, что мне нужно;)

Ответы [ 2 ]

2 голосов
/ 08 января 2012

Установщики в стиле все равно запечатываются (возможно, вместе с содержащей коллекцию, когда стиль используется), поэтому вы не можете изменить его, стили должны быть постоянными. Я бы порекомендовал вам поменять весь стиль на новый или попытаться подойти к этому по-другому.

1 голос
/ 11 августа 2016
var prop = ((Setter)setter).Property;
if (prop.Name.Equals("Background")
{
   //do smth
}
...