12

SizeToContent="WidthAndHeight" により、時間の経過とともにサイズが変化する WPF ウィンドウがあります。最初に、 WindowStartupLocation="CenterScreen" はウィンドウを正しく中央に表示し、その後、次のように再配置します。

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

ただし、ウィンドウが最初にサイズ変更され、その後中央に配置されるため、「ジャンプ」が発生します。

スムーズに行う方法はありますか?

4

4 に答える 4

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. プログラムでイメージを (X,Y) に移動する最も簡単な方法は?

于 2013-11-11T14:34:57.793 に答える
-1
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        if (e.HeightChanged)
            Top += (e.PreviousSize.Height - e.NewSize.Height) / 2;
        if (e.WidthChanged)
            Left += (e.PreviousSize.Width - e.NewSize.Width) / 2;
    }
于 2019-06-12T14:57:14.810 に答える