改变故事板

时间:2013-09-20 09:39:18

标签: c# windows-8 windows-runtime microsoft-metro winrt-xaml

我有一个问题:

我正在Windows 8的菜单中创建幻灯片:

<Grid x:Name="grid" VerticalAlignment="Bottom" Margin="0,0,0,-500" Grid.RowSpan="2" Width="500" Height="500" Background="White" RenderTransformOrigin="0.5,0.5">
        <Grid.RenderTransform>
            <CompositeTransform/>
        </Grid.RenderTransform>
    </Grid>

我有这个动画:

<VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="ShowHideHelp">
            <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="0:0:0.2"/>
            </VisualStateGroup.Transitions>
            <VisualState x:Name="HideHelp"/>
            <VisualState x:Name="ShowHelp">
                <Storyboard>
                    <DoubleAnimation Duration="0" To="-500" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="grid" d:IsOptimized="True"/>
                </Storyboard>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>

如何更改故事板的TO属性( To =“ - 500”)? (高亮)

<Storyboard> <DoubleAnimation Duration="0" To="-500"....

2 个答案:

答案 0 :(得分:1)

试试这个。

XAML

<Grid x:Name="grid" VerticalAlignment="Bottom" Margin="0,0,0,-500" Grid.RowSpan="2" Width="500" Height="500" Background="White" RenderTransformOrigin="0.5,0.5">
    <Grid.RenderTransform>
        <CompositeTransform/>
    </Grid.RenderTransform>
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="ShowHideHelp">
            <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="0:0:0.2"/>
            </VisualStateGroup.Transitions>
            <VisualState x:Name="HideHelp"/>
            <VisualState x:Name="ShowHelp">
                <Storyboard>
                    <DoubleAnimation Duration="0" To="-500" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="grid" d:IsOptimized="True"/>
                </Storyboard>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
</Grid>

C#

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    var storyboard = VisualStateManager.GetVisualStateGroups(this.grid).Get("ShowHideHelp").States.Get("ShowHelp").Storyboard;
    ((DoubleAnimation)(storyboard.Children[0])).To = 500;
}

public static class VisualStateExtensions
{
    public static VisualStateGroup Get(this IList<VisualStateGroup> stateGroups, string name)
    {
        return stateGroups.Single(x => x.Name == name);
    }

    public static VisualState Get(this IList<VisualState> stateGroups, string name)
    {
        return stateGroups.Single(x => x.Name == name);
    }
}

答案 1 :(得分:1)

这个对我有用,稍微改变了Xyroids代码:

var storyboard = ShowHelp.Storyboard;
((DoubleAnimation)(storyboard.Children[0])).To = 500;