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做吧。就是这样:)如此简单的解决方案如此混乱--效果很好:)就是这样:)如此简单的解决方案如此混乱--效果很好:)