Silverlight: Анимацията на VisualState се отменя по някакъв начин

Имам доста сложен персонализиран контрол, който ще ви шашне, ако ви покажа целия код. ;) Като цяло това е панел, показващ множество контроли. Можете да мислите за това като за персонализирано списъчно поле. (Моля, не ми казвайте да използвам списък, бил съм там и не отговаря напълно на нуждите ми).

И така, зададох някои анимации в VisualStateManager. Ето какво се случва:

  • Когато поставя курсора на мишката над една от моите дъщерни контроли, очаквам да се активира състоянието MouseOver. Това го прави.
  • Когато избера един от моите дъщерни контроли, очаквам състоянието Избрано да се активира и то се задейства.
  • Когато избера различна дъщерна контрола, състоянието Избрано също се активира
  • Когато се върна към първата си дъщерна контрола, която избрах, и я избера, състоянието Избрано се задейства (чрез изрази за отстраняване на грешки в моя код), но Показва се анимация 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("Inside 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)