2013-05-09 9 views
8

SizeToContent = "WidthAndHeight"のために時間の経過とともにサイズが変更されるWPFウィンドウがあります。当初WindowStartupLocation =「画面の中央には、」正しく中央にウィンドウを示し、その後私はそれを更新したり: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

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; 
} 
関連する問題