Silverlight: как-то переопределяется анимация VisualState

У меня есть довольно сложный настраиваемый элемент управления, который поразит вас, если я покажу вам весь код. ;) В общем, это панель с несколькими элементами управления. Вы можете думать об этом как о настраиваемом списке. (Пожалуйста, не говорите мне использовать список, я был там, и он не полностью соответствует моим потребностям).

Итак, я установил несколько анимаций в VisualStateManager. Вот что происходит:

  • Когда я нахожу на один из своих дочерних элементов управления, я ожидаю, что сработает состояние MouseOver. Оно делает.
  • Когда я выбираю один из моих дочерних элементов управления, я ожидаю, что сработает состояние Выбрано, и оно сработает.
  • Когда я выбираю другой дочерний элемент управления, также срабатывает состояние Выбрано.
  • Когда я возвращаюсь к своему первому выбранному мной дочернему элементу управления и выбираю его, состояние Selected отображается как срабатывающее (с помощью операторов отладки в моем коде), но Отображается анимация MouseOver.

Есть ли проблема с анимацией, которую можно каким-то образом переопределить, или проблема между состояниями MouseOver и Selected, о которых я не знаю?

Вот моя разметка VSM:

<VisualStateManager.VisualStateGroups>
    <VisualStateGroup x:Name="CommonStates">       
        <VisualState x:Name="Normal">
            <Storyboard>
                <ColorAnimationUsingKeyFrames BeginTime="0" Duration="00:00:00.150000" Storyboard.TargetName="Backdrop" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)">
                    <SplineColorKeyFrame KeyTime="0" Value="DarkGray"/>
                </ColorAnimationUsingKeyFrames>
            </Storyboard>
        </VisualState>
        <VisualState x:Name="MouseOver">
            <Storyboard>
                <ColorAnimationUsingKeyFrames BeginTime="0" Duration="00:00:00.150000" Storyboard.TargetName="Backdrop" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)">
                    <SplineColorKeyFrame KeyTime="0" Value="Yellow"/>
                </ColorAnimationUsingKeyFrames>
            </Storyboard>
        </VisualState>
    </VisualStateGroup>
    <VisualStateGroup x:Name="SelectedStates">
        <VisualState x:Name="Unselected">
            <Storyboard>
                <ColorAnimationUsingKeyFrames BeginTime="0" Duration="1" Storyboard.TargetName="Backdrop" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)">
                    <SplineColorKeyFrame KeyTime="0" Value="Purple"/>
                </ColorAnimationUsingKeyFrames>
            </Storyboard>
        </VisualState>
        <VisualState x:Name="Selected">
            <Storyboard>
                <ColorAnimationUsingKeyFrames BeginTime="0" Duration="1" Storyboard.TargetName="Backdrop" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)">
                    <SplineColorKeyFrame KeyTime="0" Value="Green"/>
                </ColorAnimationUsingKeyFrames>
            </Storyboard>
        </VisualState>
    </VisualStateGroup>
</VisualStateManager.VisualStateGroups>

И вот моя логика GoToState ():

private void GoToState (bool useTransitions) {TestingVariables ("Внутри GoToState");

if (_isSelected)
{
    System.Diagnostics.Debug.WriteLine(_thumbnail.ShortFileName + " firing Selected VSM");
    VisualStateManager.GoToState(this, "Selected", useTransitions);
}
else if (_wasSelected)
{
    _wasSelected = false;
    System.Diagnostics.Debug.WriteLine(_thumbnail.ShortFileName + " firing Unselected");
    VisualStateManager.GoToState(this, "Unselected", useTransitions);
}
else if (_isMouseOver)
{
    System.Diagnostics.Debug.WriteLine(_thumbnail.ShortFileName + " firing MouseOver VSM");
    VisualStateManager.GoToState(this, "MouseOver", useTransitions);
}
else
{
    System.Diagnostics.Debug.WriteLine(_thumbnail.ShortFileName + " firing Normal VSM");
    VisualStateManager.GoToState(this, "Normal", useTransitions);
}

}

Итак, я могу видеть, какой метод VisualStateManger.GoToState () запущен, а вызов TestingVariables () - это всего лишь метод, который я использую для записи условных флагов, которые я использую, чтобы определить, какое визуальное состояние запускать.

Заранее спасибо.


person beaudetious    schedule 19.01.2010    source источник


Ответы (1)