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

时间:2018-07-23 12:54:20

标签: wpf windows position screen

将我的应用程序的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不匹配。

1 个答案:

答案 0 :(得分: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;
 }