С VisualStateManager
происходит странное поведение: его состояния должны находиться не в элементе управления, а в дочернем элементе управления.
Это означает, что метод GoToState
должен вызываться с параметром this
вместо параметра this.LayoutRoot
, но определения групп состояний должны находиться внутри Grid
:
VisualStateManager.GoToState(this, "stateRegistration", true);
Я не знаю, где взять класс ExtendedVisualStateManager
, поэтому я использую класс по умолчанию.
Кроме того, если какая-либо анимация состояния раскадровки не работает - все анимации отменяются.Попробуйте этот пример кода с двумя анимациями, он должен работать:
<Grid x:Name="LayoutRoot" Width="897" Height="699">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState x:Name="stateRegistration">
<Storyboard>
<DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="btnRegRegister" d:IsOptimized="True"/>
<DoubleAnimation Duration="0" To="-10" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="btnRegRegister" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Button x:Name="btnRegRegister" Content="Some button" Click="btnRegRegister_Click" VerticalAlignment="Center" HorizontalAlignment="Center">
<Button.RenderTransform>
<CompositeTransform TranslateX="0" TranslateY="0" />
</Button.RenderTransform>
</Button>
</Grid>