Silverlight: как создать VisualState для шаблонного / пользовательского элемента управления - PullRequest
2 голосов
/ 14 октября 2011

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

Базовое управление может быть System.Windows.Controls.Button. Кнопка имеет следующие визуальные состояния:

<vsm:VisualStateManager.VisualStateGroups>
    <!--Define the states for the common states. The states in a 
                            VisualStateGroup are mutually exclusive to each other.-->
    <vsm:VisualStateGroup x:Name="CommonStates">
        <!--Define the VisualStates in this VistualStateGroup.-->
        <vsm:VisualState x:Name="Normal"/>
        <vsm:VisualState x:Name="MouseOver" />
        <vsm:VisualState x:Name="Pressed" />
        <vsm:VisualState x:Name="Disabled" />
    </vsm:VisualStateGroup>
    <!--Define the states for the focus states. The states in a 
                            VisualStateGroup are mutually exclusive to each other.-->
    <vsm:VisualStateGroup x:Name="FocusStates">
        <!--Define the VisualStates in this VistualStateGroup.-->
        <vsm:VisualState x:Name="Focused" />
        <vsm:VisualState x:Name="Unfocused" />
    </vsm:VisualStateGroup>
</vsm:VisualStateManager.VisualStateGroups>

Мой пользовательский элемент управления требует другого состояния, MouseButtonUp (MouseButtonDown может быть представлено предопределенным состоянием Pressed). Здесь состояние MouseButtonUp будет интерпретироваться как состояние MouseOver по умолчанию, но я хочу состояние MouseButtonUp ведет себя иначе, чем MouseOver состояние.

Как я могу добавить это MouseButtonUp визуальное состояние? (MouseButtonUp Состояния существуют только после того, как пользователь отпустит мышь и до того, как пользователь начнет двигаться.

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

Большое спасибо.

ОБНОВЛЕНИЕ: Как только мы добавили это состояние MouseButtonUp, я мог бы сделать визуальные переходы, такие как:

<vsm:VisualTransition From="Pressed" To="MouseButtonUp" GeneratedDuration="0:0:5" />

Или:

<vsm:VisualTransition From="MouseButtonUp" To="MouseOver" GeneratedDuration="0:0:5" />

1 Ответ

2 голосов
/ 14 октября 2011

В следующей строке создается визуальное состояние для вас в xaml.

    <vsm:VisualState x:Name="MouseButtonUp">
        ...Your code for animation
    </vsm:VisualState>

Это еще не все. Это бесполезно, если вы не заставите свой контроль выполнения перейти в это Visual-State. Ну, как ты это делаешь? Вот как.

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

Приведенный выше код выполнит любую анимацию, которую вы, возможно, определили в определении VisualBtate MouseButtonUp в xaml. Вызывайте приведенный выше оператор кода везде, где вы чувствуете, что ваша мышь имеет состояние MousebuttonUp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...