Получение определенного установщика объекта стиля

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

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

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

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

// 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». ... Но это не -общедоступный атрибут!

Было бы здорово, если бы у кого-нибудь были предложения :)

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


person marc wellman    schedule 08.01.2012    source источник
comment
H.B в посте ниже абсолютно прав. Style.IsSealed свойство истинно, и вы не можете изменить его во время выполнения. Установить значение средства настройки стиля из кода программной части во время выполнения . Изменить стиль окна во время выполнения работал на VS2008, не работает на VS2010   -  person Anatolii Gabuza    schedule 08.01.2012


Ответы (1)


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

person H.B.    schedule 08.01.2012
comment
Сеттеров опечатывают? - Что за бесполезные идеи;) нет, я просто шучу :) Большое спасибо за ваш ответ - я действительно не знал об этом факте ... Мне придется применить другой подход, не меняя стиль после его инициализации . - person marc wellman; 08.01.2012