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

问题描述 投票:3回答:1

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

显示比例被关闭。这是一个普通的96 DPI 1920 x 1200屏幕。

AFAIR它在我的PC上可以正常工作了,当然我没有做任何更改;-)

所以

  1. 为什么WPF返回此值和
  2. 为什么它在不同的系统上工作和不同?
  3. 如何检索“出厂设置”?

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

一些更奇怪的细节

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

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

wpf windows position screen
1个回答
0
投票

作为解决方法,可以在帖子here中使用以下代码:

 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;
 }
© www.soinside.com 2019 - 2024. All rights reserved.