我有一个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/