4

我正在尝试通过代码使状态与可视状态管理器一起更改。

我在用:

Microsoft.Expression.Interactivity.Core.ExtendedVisualStateManager.GoToElementState(this.LayoutRoot, "stateRegistration", true);

但它似乎不想工作,我创建了一个事件处理程序和一个侦听器,但是使用该代码时状态没有改变。

谁能帮我吗。

XAML 代码(代码片段):

<Grid x:Name="LayoutRoot" Width="897" Height="699">
<VisualStateManager.VisualStateGroups>
<VisualState x:Name="stateRegistration">
                    <Storyboard>
                        <DoubleAnimation Duration="0" To="870" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="RegisterContent" d:IsOptimized="True"/>
                        <DoubleAnimation Duration="0" To="880" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="HomeContent" d:IsOptimized="True"/>
                        <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>
</Grid>

谢谢。

4

1 回答 1

6

有一个奇怪的行为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>
于 2011-04-18T16:10:00.600 回答