VisualStateManager в Silverlight: установка начального состояния

Я часто нахожу необходимость включать в себя визуальные состояния типа «отсутствует» и «присутствует», которые используются для анимации отсутствия или видимости элемента управления в зависимости от некоторых других условий.

В таком случае, как правило, начальным состоянием должно быть состояние «далеко». Насколько я понимаю, нет способа определить начальное состояние в SL, кроме «base», которое на самом деле не является состоянием вообще, но указывает на то, как выглядит внешний вид, когда менеджер состояний еще не активен (раскадровки состояний не выполняются для изменить внешний вид элемента управления).

Конечно, вы можете спроектировать «базу» так, чтобы она выглядела «далеко», но это означает, что внешний вид по умолчанию в Expression Blend невидим (вы также не можете «закрепить» состояние навсегда).

Чтобы изменить начальное состояние, я попытался

  • установить состояние в ctor элемента управления, который ничего не делает, и
  • установить состояние в отправленном вызове от ctor или в событии Loaded, которые оба показывают неправильные состояние на долю секунды.

Таким образом, проблема, похоже, в том, что что бы ни делал диспетчер визуального состояния, он делает это не сразу, а требует заметной доли секунды, чтобы изменить внешний вид.

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

Полагаю, я покрыл все это, и мне просто нужно жить с невидимым базовым состоянием?

Я использую SL4.

5
задан John 1 March 2012 в 17:34
поделиться