2013-05-09 44 views
8

由於SizeToContent =「WidthAndHeight」,我有一個隨時間改變其大小的WPF窗口。最初WindowStartupLocation =「中心屏幕」顯示正確中心的窗口,之後我recenter它:保持窗口集中在SizeToContent之後順利

Private Sub Window_SizeChanged(ByVal sender As Object, ByVal e As System.Windows.SizeChangedEventArgs) Handles Me.SizeChanged 
    Me.Top = (SystemParameters.WorkArea.Height - e.NewSize.Height)/2 
    Me.Left = (SystemParameters.WorkArea.Width - e.NewSize.Width)/2 
End Sub 

但它產生「跳躍」的窗口被調整大小的第一和後居中。

有沒有辦法順利進行?

回答

0

而不是直接設置Me.Top和Me.Left,您可以使用TranslateTransform爲位置更改設置動畫。

public static void MoveTo(this UIElement target, double newX, double newY) 
{ 
    var top = Canvas.GetTop(target); 
    var left = Canvas.GetLeft(target); 
    TranslateTransform trans = new TranslateTransform(); 
    target.RenderTransform = trans; 
    DoubleAnimation anim1 = new DoubleAnimation(top, newY - top, TimeSpan.FromSeconds(10)); 
    DoubleAnimation anim2 = new DoubleAnimation(left, newX - left, TimeSpan.FromSeconds(10)); 
    trans.BeginAnimation(TranslateTransform.XProperty,anim1); 
    trans.BeginAnimation(TranslateTransform.YProperty,anim2); 
} 

代碼源:WPF. Easiest way to move Image to (X,Y) programmatically?

+0

因爲在技術上它的作品我沒有投下來。但是,我不確定任何人都會想要重新調整新調整大小的窗口的動畫重新定位。一個更酷的事情動畫將調整起始點爲0.5,0.5。窗戶將始終保持中心位置,並跨越所需的尺寸。 – Crono 2016-03-29 13:26:14

2

這爲我工作:

protected override void OnRenderSizeChanged(SizeChangedInfo sizeInfo) 
{ 
    base.OnRenderSizeChanged(sizeInfo); 

    //Calculate half of the offset to move the form 

    if (sizeInfo.HeightChanged) 
     this.Top += (sizeInfo.PreviousSize.Height - sizeInfo.NewSize.Height)/2; 

    if (sizeInfo.WidthChanged) 
     this.Left += (sizeInfo.PreviousSize.Width - sizeInfo.NewSize.Width)/2; 
}