Диспетчер визуального состояния в настраиваемом элементе управления

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

Затем я использую это как корень своего xaml (помещая код в папку шаблонов в Blend)

Все работает нормально, я могу открыть новый «DaveControl» и получить нужную мне функциональность.

Однако, если я затем добавлю сюда несколько визуальных состояний, например alertOnScreen, и попытаюсь использовать visualstatemanager, это не сработает.

на самом деле нет никаких состояний в списке.

Однако поведение в SL3 GotoVisualState работает нормально!

Как заставить визуальное состояние работать в коде?


person DavidA    schedule 13.01.2010    source источник
comment
Просматривая поведение, он использует элемент структуры, а не элемент управления. Это работает.   -  person DavidA    schedule 13.01.2010


Ответы (2)


Итак, решение следующее: используйте расширенный диспетчер визуального состояния!

ExtendedVisualStateManager.GoToElementState(this.LayoutRoot as FrameworkElement, "OffScreen", true);

Это работает, потому что для этого требуется элемент Framework ... среди прочего. Обходной путь для VisualStateManager.GoToState не работает в Window

person DavidA    schedule 13.01.2010

Вы добавили набор доступных состояний как набор атрибутов TemplateVisualState в класс? Blend использует их для настройки списка доступных состояний.

Ваш класс обычно должен выглядеть так: -

[TemplateVisualState(Name = "MyGroup1State1", GroupName = "MyGroup1")]
[TemplateVisualState(Name = "MyGroup1State2", GroupName = "MyGroup1")]
[TemplateVisualState(Name = "MyGroup2State1", GroupName = "MyGroup2")]
[TemplateVisualState(Name = "MyGroup2State2", GroupName = "MyGroup2")]
[TemplatePart(...)]
[TemplatePart(...)]
public class MyControl : ContentControl
person AnthonyWJones    schedule 13.01.2010
comment
Энтони, там работают визуальные состояния для контроля. Этот элемент управления в основном представляет собой настраиваемый контейнер ... Я использую его в качестве корневого элемента в моем файле xaml- ›New Dave Control (таким образом я могу получить производные от класса без проблем с частичным классом). Теперь предположим, что на этом элементе управления есть кнопка «Добавить адрес», которая требует, чтобы что-то переместилось на сцену, настраиваемую для этого экземпляра ... отсюда и моя проблема. Спасибо за ответ, с заголовком уверен, кому-то поможет. - person DavidA; 13.01.2010