gpt4 book ai didi

WPF 窗口 Left 属性与左屏幕边框对齐后具有负值

转载 作者:行者123 更新时间:2023-12-02 20:17:45 25 4
gpt4 key购买 nike

将应用程序的 WPF 窗口与屏幕左边框对齐时,我的代码为窗口的 Left 属性返回负值(-7,不是预期的值)。相同的代码在对等方的 PC 上返回零(如预期)。

显示缩放已关闭。这是一个普通的 96 DPI 1920 x 1200 屏幕。

AFAIR 它不久前在我的电脑上按预期运行,当然我没有更改任何内容;-)

所以

  1. 为什么 WPF 返回这个值
  2. 为什么它在不同系统上的工作方式不同
  3. 如何恢复“出厂设置”?

背景:应用程序支持将窗口位置保存到“工作台”文件并在不同的系统上再次加载。如果 (0,0) 在不同系统上不相同,则很难实现这一点。 (当然需要考虑可用的屏幕。但这是一个不同的故事。y)

一些更奇怪的细节

  • System.Windows.SystemParameters.WorkArea.TopLeft 为 (0,0)(如预期)。System.Windows.SystemParameters.WorkArea 的其他参数也符合预期(宽度和高度)。
  • 将应用程序窗口的位置设置为 (-7,0) 会将窗口移动到屏幕的左上角。
  • 调整窗口大小以填充屏幕(使用鼠标)后,其宽度为 1934(预计为 1920)。将其宽度设置为此值可调整窗口大小以填充屏幕(宽度)。

因此,似乎存在一些特定于应用程序的缩放和偏移,它们在检索和设置窗口大小和位置方面是一致的,但与System.Windows.SystemParameters.WorkArea不匹配。

最佳答案

可以使用以下代码作为解决方法:

 private double GetWindowLeft(Window window)
{
if (window.WindowState == WindowState.Maximized)
{
var leftField = typeof(Window).GetField("_actualLeft", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
return (double)leftField.GetValue(window);
}
else
return window.Left;
}

关于WPF 窗口 Left 属性与左屏幕边框对齐后具有负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51479333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com