在没有所有孩子"跳跃"的情况下调整WPF UserControl的大小

Nat*_*ate 6 .net wpf user-interface animation storyboard

有没有办法调整WPF UserControl的大小,使子控件不会失败?

我有这个故事板:

<Storyboard>
    <DoubleAnimation Storyboard.TargetProperty="Height" Storyboard.TargetName="MyUserControl" To="145" From="0" Duration="0:0:1" />
</Storyboard>
Run Code Online (Sandbox Code Playgroud)

这很好用; 它取决于我从高度零到高度145的控制 - 问题是随着高度属性的变化,我怀疑,由于它们的Horizo​​ntalAlignment和VerticalAlighment属性,内部的所有子控件开始跳转.有没有办法可以在动画结束前禁用它?

我试图创建这个UserControl"幻灯片"进入视图的错觉 - 所以如果我发生错误,我会对其他方法持开放态度.

Pav*_*kov 5

一切都在"跳跃",因为每次Height控件更改时,所有包含的控件都会根据新的可用空间重新定位.

为了达到预期的效果,您应该使用RenderTransform而不是更改Height控件的实际效果.

这是你如何做到这一点.首先,在控件上添加属性ScaleTransformRenderTransform:

<MyUserControl.RenderTransform>
    <ScaleTransform ScaleY="0" />
</MyUserControl.RenderTransform>
Run Code Online (Sandbox Code Playgroud)

然后,修改动画的目标属性以更改变换的ScaleY属性:

<Storyboard>
    <DoubleAnimation Storyboard.TargetProperty="RenderTransform.(ScaleTransform.ScaleY)" Storyboard.TargetName="MyUserControl" To="145" Duration="0:0:1" />
</Storyboard>
Run Code Online (Sandbox Code Playgroud)

更新:

实现幻灯片到视图效果的另一种方法是使用TranslateTransform负值Y:

<MyUserControl.RenderTransform>
   <TranslateTransform Y="-1000" />
</MyUserControl.RenderTransform>
Run Code Online (Sandbox Code Playgroud)

然后,将其Y属性设置为0:

<Storyboard>
    <DoubleAnimation Storyboard.TargetProperty="RenderTransform.(TranslateTransform.Y)" Storyboard.TargetName="MyUserControl" To="0" Duration="0:0:1" />
</Storyboard>
Run Code Online (Sandbox Code Playgroud)