WPF Window Scale转换动画

时间:2013-09-15 02:16:20

标签: wpf animation scaletransform easing-functions

我在WPF中有一个我希望用ShowDialog显示的窗口,当窗口显示时,它应该有一个缩放动画。我已经成功创建了动画,除了一件事以外,所有作品都很棒:

当窗口接近完全缩放状态并且缓动函数启动时,窗口的外边缘似乎超出实际窗口边界并被剪切。如何使用此缩放动画进行缓动而不将其剪裁?

这是我正在使用的缩放动画:

<DoubleAnimation Storyboard.TargetProperty="(Window.RenderTransform).(ScaleTransform.ScaleX)"
                 BeginTime="0:0:0.0" Duration="0:0:0.4" From="0" To="1">
   <DoubleAnimation.EasingFunction>
      <BackEase EasingMode="EaseOut" Amplitude="0.25" />
   </DoubleAnimation.EasingFunction>
</DoubleAnimation>

<DoubleAnimation Storyboard.TargetProperty="(Window.RenderTransform).(ScaleTransform.ScaleY)"
                 BeginTime="0:0:0.0" Duration="0:0:0.4" From="0" To="1">
   <DoubleAnimation.EasingFunction>
      <BackEase EasingMode="EaseOut" Amplitude="0.25" />
   </DoubleAnimation.EasingFunction>
</DoubleAnimation>

编辑:剪辑的原因是缓动功能不会移动窗口,而是移动窗口中的内容;至少那是它似乎正在做的事情。窗口具有自定义样式,顶角为圆形。实际窗口具有透明背景。因此,当内容中的缓动功能达到超过实际窗口的大小时,由于内容超出窗口大小,因此显示硬90度角。

由于动画与窗口本身相关联而不是窗口内容,因此不应该在此时拉伸内部内容。

2 个答案:

答案 0 :(得分:1)

我有同样的问题。使用ScaleTransform时,窗口无法增长,因为它本质上是语义的。也就是说,它不会更改WPF计算的布局值,只会在布局设置后应用。

我的解决办法就是让窗户更大,边距更透明。并删除它的边框。您可以在此处找到一个有效的示例:WPF MessageBox

答案 1 :(得分:0)

尝试将宽度和高度设置为实际大小 <Window ... SizeToContent="WidthAndHeight" />