我有一个Grid定义了两个ColumnDefinition

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition x:Name="column0" Width="*"/>
        <ColumnDefinition x:Name="column1" Width="Auto"/>
    </Grid.ColumnDefinitions>

    <Grid Grid.Column="0" x:Name="content0">
    </Grid>

    <Grid Grid.Column="1" x:Name="content1">
        <Button Content="Press me!" />
    </Grid>
</Grid>


现在,我想使用Storyboard创建折叠动画。
为此,我创建了这个:

<Storyboard x:Key="myStoryboard">
    <DoubleAnimation
        Storyboard.TargetName="content1"
        Storyboard.TargetProperty="Width"
        From="??" To="0" Duration="0:0:1" EnableDependentAnimation="True" />
</Storyboard>


我的问题是From属性。
如果我输入一个特定的值(例如100),则一切正常,但我想做一些类似From={Binding ElementName=content1, Path=ActualWidth}的操作,但该方法不起作用。
我试图创建一个IValueConverter,但是那些不适用于From
另外,如果我在代码后面设置了content1.Width = 100,它也可以工作。

我丢失了某些东西还是使用了错误的动画类型?

编辑:为了测试目的,我试图在一个单独的项目中做类似的事情。
我检查了它是否确实有效,但是{Binding ElementName=content1, Path=ActualWidth的返回值似乎始终为0。使用{Binding ElementName=content1, Path=Width时也会发生同样的情况。不幸的是,我不知道为什么值总是为0。

Edit2:实际上,我不确定我的第一次编辑是否正确。

最佳答案

您可以使用代码而不是Xaml来实现。按照你的例子做这样的事情

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        MoveGrid();
    }

    private void MoveGrid()
    {
        var sb = new Storyboard();
        var animation = new DoubleAnimation()
        {
            To = 0,
            From = content1.ActualWidth,
            EnableDependentAnimation = true
        };
        Storyboard.SetTargetProperty(animation, "Width");
        Storyboard.SetTarget(animation, content1);
        sb.Children.Add(animation);

        sb.Begin();
    }

关于c# - 通过 Storyboard 在Grid.Column中调整网格大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20874318/

10-10 15:16