2013-09-15 8 views
2

У меня есть окно в WPF, которое я хочу отображать с ShowDialog, и когда окно отображается, оно должно иметь масштабирующую анимацию. Я успешно создал анимацию, и все работает отлично, за исключением одной вещи:WPF Window ScaleTransform анимация

Когда окно приближается к полностью масштабированному состоянию, а функция ослабления срабатывает, внешние края окна, по-видимому, выходят за рамки фактических границ окна и обрезаются , Как я могу использовать эту масштабирующую анимацию с ослаблением и не обрезать ее?

Это масштабирование анимации я использую:

<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> 

EDIT: Причина, по-видимому, клип является то, что функция замедления не перемещает окно, а скорее содержимое внутри окна; по крайней мере, так оно и есть. Окно имеет собственный стиль и верхние углы округлены. Фактическое окно имеет прозрачный фон. Поэтому, когда функция ослабления во внутреннем содержимом достигает размера фактического окна, а жесткие углы 90 градусов отображаются, поскольку содержимое растягивается за пределы размера окна.

Внутренний контент, растянувшийся в этой точке, не должен происходить, поскольку анимация привязана к самому окну, а не к содержимому окна.

ответ

1

У меня была та же проблема. Окно не может расти при использовании ScaleTransform, так как оно носит смысловой характер. То есть, он не изменяет значения вычисляемого макета WPF и применяется только после установки макета.

Моим решением было просто увеличить окно с прозрачными полями. и удалить его границы. Вы можете найти рабочий пример здесь: WPF MessageBox

+0

прекрасно работает и имеет смысл. – vane

0

Попробуйте это, чтобы установить ширину и высоту фактического размера <Window ... SizeToContent="WidthAndHeight" />