public static class SetShowCenterWindowHelper
{
public static void SetShowCenterWindow(Window targetWindow, Window owner)
{
targetWindow.WindowStartupLocation = WindowStartupLocation.Manual;
// 获取主窗口的位置和大小
var ownerPosition = owner.Position;
var ownerWidth = owner.Width;
var ownerHeight = owner.Height;
// 获取对话框的尺寸(确保在调用前已设置Width和Height,或使用ActualWidth/ActualHeight)
var dialogWidth = targetWindow.Width;
var dialogHeight = targetWindow.Height;
// 计算居中坐标
var centerX = ownerPosition.X + (ownerWidth - dialogWidth) / 2;
var centerY = ownerPosition.Y + (ownerHeight - dialogHeight) / 2;
// 应用计算出的位置
targetWindow.Position = new PixelPoint((int)centerX, (int)centerY);
}
}
public static void SetShowCenterWindowAfterOpened(Window targetWindow, Window owner)
{
// 移除手动设置,改用 CenterOwner 作为初始定位,确保窗口先正常显示
targetWindow.WindowStartupLocation = WindowStartupLocation.CenterOwner;
// 订阅 Opened 事件,该事件在窗口完成布局并显示后触发
targetWindow.Opened += (sender, e) =>
{
// 此时窗口的 ActualWidth 和 ActualHeight 已是最终渲染尺寸
var dialogWidth = targetWindow.Width;
var dialogHeight = targetWindow.Height;
// 获取主窗口的最终位置和尺寸
var ownerPosition = owner.Position;
var ownerWidth = owner.Width;
var ownerHeight = owner.Height;
// 计算居中坐标
var centerX = ownerPosition.X + (ownerWidth - dialogWidth) / 2;
var centerY = ownerPosition.Y + (ownerHeight - dialogHeight) / 2;
// 应用计算出的位置
targetWindow.Position = new PixelPoint((int)centerX, (int)centerY);
};
}