SizeToContent 后平滑地保持窗口居中

swift

1个回答

写回答

Alex呀

2025-06-20 16:50

+ 关注

XML
XML

使用WPF(Windows Presentation Foundation)开发桌面应用程序时,我们经常会遇到调整窗口大小以适应内容的需求。WPF提供了一个名为SizeToContent的属性,可以自动调整窗口的大小以适应其内容。然而,当窗口大小发生变化时,窗口通常会重新定位,导致窗口不再居中显示。本文将介绍如何在使用SizeToContent属性后平滑地保持窗口居中。

案例代码:

首先,我们需要在XAML文件中设置窗口的SizeToContent属性为WidthAndHeight,以便窗口根据内容自动调整大小。

XML

<Window x:Class="WindowCenteringExample.MAInWindow"</p> XMLns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

XMLns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Title="Window Centering Example" SizeToContent="WidthAndHeight">

<!-- 窗口内容 -->

</Window>

接下来,在窗口加载完成的事件处理程序中,我们将使用窗口的ActualWidth和ActualHeight属性来计算窗口的左上角位置,并将窗口重新定位到屏幕中央。

csharp

public partial class MAInWindow : Window

{

public MAInWindow()

{

InitializeComponent();

Loaded += MAInWindow_Loaded;

}

private void MAInWindow_Loaded(object sender, RoutedEventArgs e)

{

// 计算窗口左上角位置

double left = (SystemParameters.PrimaryScreenWidth - ActualWidth) / 2;

double top = (SystemParameters.PrimaryScreenHeight - ActualHeight) / 2;

// 重新定位窗口

Left = left;

Top = top;

}

}

通过以上代码,我们可以实现在窗口大小自动调整后保持窗口居中显示的效果。

平滑地保持窗口居中

当窗口的SizeToContent属性设置为WidthAndHeight时,窗口会根据内容的大小自动调整自身的宽度和高度。然而,窗口的位置并不会自动调整,这意味着窗口在调整大小后会重新定位,导致窗口不再居中显示。

为了解决这个问题,我们可以在窗口的加载完成事件中重新计算窗口的位置,并将窗口平滑地移动到新的位置。这样,无论窗口大小发生多少次变化,窗口始终能够保持居中显示。

代码示例:

csharp

public partial class MAInWindow : Window

{

public MAInWindow()

{

InitializeComponent();

Loaded += MAInWindow_Loaded;

SizeChanged += MAInWindow_SizeChanged;

}

private void MAInWindow_Loaded(object sender, RoutedEventArgs e)

{

CenterWindow();

}

private void MAInWindow_SizeChanged(object sender, SizeChangedEventArgs e)

{

CenterWindow();

}

private void CenterWindow()

{

// 计算窗口左上角位置

double left = (SystemParameters.PrimaryScreenWidth - ActualWidth) / 2;

double top = (SystemParameters.PrimaryScreenHeight - ActualHeight) / 2;

// 平滑地移动窗口到新的位置

Left = left;

Top = top;

}

}

在以上示例代码中,我们在窗口的加载完成事件和大小变化事件中调用了CenterWindow方法,该方法计算窗口的新位置并平滑地将窗口移动到新的位置。这样,无论窗口大小如何变化,窗口始终能够保持居中显示。

通过以上方法,我们可以实现在使用SizeToContent属性后平滑地保持窗口居中的效果。这对于那些需要根据内容自动调整窗口大小的应用程序来说,能够提供更好的用户体验。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号