有没有办法调整WPF UserControl的大小,使子控件不会失败?
我有这个故事板:
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Height" Storyboard.TargetName="MyUserControl" To="145" From="0" Duration="0:0:1" />
</Storyboard>
这很有效;它取决于我从高度零到高度145的控制 - 问题是当高度属性发生变化时,由于其HorizontalAlignment和VerticalAlighment属性,我怀疑里面的所有子控件开始跳转。有没有办法可以在动画结束前禁用它?
我正在尝试创建这个UserControl“幻灯片”进入视图的错觉 - 所以如果我发生这种错误,我会对其他方法持开放态度。
答案 0 :(得分:5)
一切都在“跳跃”,因为每次更改控件的Height
时,所有包含的控件都会根据新的可用空间重新定位。
要达到预期效果,您应该使用RenderTransform
而不是更改控件的实际Height
。
以下是如何做到这一点。首先,在您的控件上添加ScaleTransform
作为RenderTransform
属性的值:
<MyUserControl.RenderTransform>
<ScaleTransform ScaleY="0" />
</MyUserControl.RenderTransform>
然后,修改动画的目标属性以更改变换的ScaleY
属性:
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="RenderTransform.(ScaleTransform.ScaleY)" Storyboard.TargetName="MyUserControl" To="145" Duration="0:0:1" />
</Storyboard>
<强>更新强>
实现幻灯片到视图效果的另一种方法是使用TranslateTransform
,其值为Y
:
<MyUserControl.RenderTransform>
<TranslateTransform Y="-1000" />
</MyUserControl.RenderTransform>
然后,将其Y
属性设为0:
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="RenderTransform.(TranslateTransform.Y)" Storyboard.TargetName="MyUserControl" To="0" Duration="0:0:1" />
</Storyboard>
答案 1 :(得分:1)
当您为Height或Width设置动画时,UserControl也会告诉其子项重新调整,这就是布局系统在WPF中的工作方式。 “跳跃”将取决于您使用的布局类型(网格,StackPanel等)。
但是看起来,对于您的场景,最好使用RenderTransform ScaleTransform ScaleY动画而不是动画高度。 Rendertransform不会干扰UserControl的布局安排。
答案 2 :(得分:0)
要添加到Pavlov的更新答案,我不得不使用空白的CompositeTransform。也许是因为使用了最新的Blend for Visual Studio 2012更新1,但这有效(针对Windows Phone 8):
<MyUserControl.RenderTransform>
<CompositeTransform />
</MyUserControl.RenderTransform>