private void FullWorkingArea()
{
// 1. 健壮地获取当前屏幕
var curScreen = Screens.ScreenFromPoint(this.Position) ?? Screens.Primary;
if (curScreen == null) return;
// 2. 获取当前屏幕的DPI缩放因子
double scaling = curScreen.Scaling;
// 3. 获取屏幕的工作区(WorkingArea 是物理像素)
var workingArea = curScreen.WorkingArea; // 这是一个 PixelRect,单位是物理像素
var wp = workingArea.Position; // 物理像素坐标
// 4. 关键修正:将窗口的尺寸也转换到物理像素空间进行计算
// 假设您期望的窗口逻辑尺寸与工作区相同(减去偏移量)
var desiredWindowWidthInLogicalUnits = workingArea.Width / scaling; // 将物理尺寸转换为逻辑尺寸
var desiredWindowHeightInLogicalUnits = workingArea.Height / scaling;
// 5. 定义逻辑偏移量,并将其转换为物理像素偏移量
var desiredLogicalOffset = 10;
var physicalOffsetX = (int)Math.Round(desiredLogicalOffset * scaling);
var physicalOffsetY = (int)Math.Round(desiredLogicalOffset * scaling);
// 6. 应用计算
// 窗口位置基于物理像素
this.Position = new PixelPoint(wp.X - physicalOffsetX, wp.Y - physicalOffsetY);
// 窗口尺寸设置为逻辑尺寸。Avalonia的Width/Height通常是逻辑单位。
// 这样设置,再结合缩放因子,就能在物理屏幕上正确渲染。
this.Width = desiredWindowWidthInLogicalUnits + (2 * desiredLogicalOffset);
this.Height = desiredWindowHeightInLogicalUnits + (2 * desiredLogicalOffset);
}