У меня проблема с анимацией Silverlight, которую я не могу исправить. Проблема, кажется, хорошо известна, но методы, используемые для ее решения, в моем случае не работают.
Вот код раскадровки, который я использую для анимации сетки, называемой underGrid. underGrid - это базовая сетка, к которой я применяю масштаб и смещение местоположения в ответ на ввод данных пользователем от мыши, чтобы они могли масштабировать и перемещать сетку в режиме реального времени. Раскадровка ResetGrid, приведенная ниже, просто анимирует текущие значения масштаба и местоположения обратно в масштаб {1, 1} и местоположение {0, 0}, сбрасывая представление для пользователя. Я хотел иметь возможность применять эту анимацию всякий раз, когда пользователь нажимает кнопку сброса, но она замораживает преобразования Масштаб и Трансляция после однократного запуска (как обсуждено здесь: http://msdn.microsoft.com/en-us/library/aa970493.aspx). Это означает, что когда пользователь затем использует мышь чтобы переместить сетку, она не двигается. Я перепробовал все, что мог придумать, чтобы анимация не влияла на свойства зависимостей. Я пытался перехватить событие Completed и попытаться (среди прочего) остановить анимация, ища анимацию до 0, проходя через ResetGrid Children и используя StoryBoard.SetTarget (). Я также пытался установить FillBehavior. нажата и не может быть снова установлена в коде пользователя.
Может кто-нибудь предложить что-нибудь, что я могу попробовать, что я не перечислил выше (резко или иначе :))? Все, что я хочу, это чтобы анимация полностью остановилась и отсоединилась при завершении.
Раскадровка XAML:
<Storyboard x:Name="ResetGrid">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="underGrid" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
<EasingDoubleKeyFrame KeyTime="00:00:00.5000000" Value="0">
<EasingDoubleKeyFrame.EasingFunction>
<CubicEase EasingMode="EaseInOut"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="underGrid" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)">
<EasingDoubleKeyFrame KeyTime="00:00:00.5000000" Value="0">
<EasingDoubleKeyFrame.EasingFunction>
<CubicEase EasingMode="EaseInOut"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="underGrid" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
<EasingDoubleKeyFrame KeyTime="00:00:00.5000000" Value="1">
<EasingDoubleKeyFrame.EasingFunction>
<CubicEase EasingMode="EaseInOut"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="underGrid" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)">
<EasingDoubleKeyFrame KeyTime="00:00:00.5000000" Value="1">
<EasingDoubleKeyFrame.EasingFunction>
<CubicEase EasingMode="EaseInOut"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
</Storyboard>