Диспетчер визуальных состояний в пользовательском контроле - PullRequest
5 голосов
/ 13 января 2010

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

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

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

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

фактически нет перечисленных состояний.

Поведение в SL3 GotoVisualState работает отлично, хотя!

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

Ответы [ 2 ]

7 голосов
/ 13 января 2010

Таким образом, решение следующее: Используйте Extended Visual State Manager!

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

Это работает, потому что требуется элемент Framework ... среди прочего. Временное решение для VisualStateManager.GoToState, не работающее с окном

1 голос
/ 13 января 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
...