Подтвердить что ты не робот

Как вернуться в состояние "Base" с помощью VisualStateManager?

Я знаю, что мы можем использовать

VisualStateManager.GoToState(this,"SomeState1",true);

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

VisualStateManager.GoToState(this,"base",true); 

// OR

VisualStateManager.GoToState(this,"",true);

// OR

VisualStateManager.GoToState(this,null,true);

Проблема в том, что нет такого способа вернуться к исходному или базовому состоянию, тогда мне придется всегда создавать первое состояние, а в contructor перейти к первому состоянию в начале управления.

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

4b9b3361

Ответ 1

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

Ответ 2

Нормальный!= Базовый.

Base - это только начальное состояние управления перед любым визуальным состоянием (например, перед активным VSM).

Если вы прочитали эту статью в

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

Ответ 3

Для этого вам нужно сначала определить ваше "базовое" состояние.

Сделка заключается в том, что если вы определяете визуальное состояние, которое не содержит раскадровку, тогда это состояние будет эффективно равно "базовому" состоянию - та, в которую был загружен элемент управления.

<VisualStateGroup x:Name="TheGroup">  
    <VisualState x:Name="SomeState1">
       <Storyboard>
         ...
       </Storyboard>
    </VisualState>

    <VisualState x:Name="BaseState" /> <!-- Note: the VisualState tag is empty -->
</VisualStateGroup>

Затем переключитесь в это состояние:

VisualStateManager.GoToState( this, "BaseState", true );