C# 是否通过故事板调整Grid.Column中网格的大小?

C# 是否通过故事板调整Grid.Column中网格的大小?,c#,xaml,winrt-xaml,C#,Xaml,Winrt Xaml,我有一个网格定义了两个列定义s: <Grid> <Grid.ColumnDefinitions> <ColumnDefinition x:Name="column0" Width="*"/> <ColumnDefinition x:Name="column1" Width="Auto"/> </Grid.ColumnDefinitions> <Grid Grid.Colum

我有一个
网格
定义了两个
列定义
s:

<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>
我的问题是来自属性的

如果我输入一个特定的值,比如100,一切正常,但我想做一些事情,比如
From={Binding ElementName=content1,Path=ActualWidth}
,但这不起作用。
我试图创建一个IValueConverter,但这些不能与来自的
一起使用
另外,如果我在代码后面设置
content1.Width=100
,它也会起作用。

我是否遗漏了什么,或者我使用了错误的动画类型

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


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

我想这就是你需要的:


简而言之,
Width
是一个
GridLength
所以你需要一个自定义的
GridLengthAnimation
类。

我想这就是你需要的:


简而言之,
Width
是一个
GridLength
类,因此您需要一个自定义的
GridLengthAnimation
类。

您可以在代码中而不是在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();
    }

您可以在代码中而不是在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();
    }

实际上,我的问题中有一个输入错误。我不想更改ColumnDefinition的宽度,但我想更改网格和网格的宽度。宽度返回一个双倍值。我将column1的宽度设置为Auto,因为我认为在column1中设置网格宽度的动画会更容易,这样可以自动调整列的大小,但这是错误的似乎不起作用:(不,网格内容1将扩展以填充主网格的列。我认为设置该列的宽度动画比设置内容1更容易。在我的情况下,我认为两种方法都同样简单/困难。我查看了codeproject链接,但不幸的是,无法为商店应用程序复制该示例,我还没有想出如何执行此操作。)请为winrt执行此操作。实际上,我的问题中有一个输入错误。我不想更改ColumnDefinition的宽度,但我想更改网格和网格的宽度。宽度返回一个双倍值。我将column1的宽度设置为Auto,因为我认为在column1中设置网格宽度的动画会更容易,以便调整列的大小但这似乎不起作用:(不,网格内容1将扩展以填充主网格的列。我认为设置该列的宽度动画比设置内容1更容易。在我的情况下,我认为两种方法都同样简单/困难。我查看了codeproject链接,但不幸的是,无法为商店应用程序复制该示例,我还没有想出如何执行此操作。)为winrt做吧。就是这样:)如此简单的解决方案如此混乱--效果很好:)就是这样:)如此简单的解决方案如此混乱--效果很好:)