为什么(WPF)窗口不是0.0像素宽?

时间:2016-04-14 13:36:53

标签: c# wpf window avalondock

从空白的WpfApplication开始,并将其粘贴到课程App中:

protected override void OnStartup(StartupEventArgs e)
{
  base.OnStartup(e);

  var w = new Window
  {
    ResizeMode = ResizeMode.NoResize,
    WindowStyle = WindowStyle.None,
    Background = Brushes.Transparent,
  };

  Console.WriteLine(w.Width);

  w.Width = 0.0;
  //w.MinWidth = 0.0; // makes no difference

  Console.WriteLine(w.Width);

  w.Show();

  Console.WriteLine(w.Width);
}

这只会创建一个新的空窗口(黑线)。

但为什么只是Show窗口增加了它的' Width2
输出:

NaN  
0  
2  

可能是Windows相关的一些限制,但我在哪里可以找到这样的限制,例如: MSDN?

它是AvalonDock中窗口放置计算中的错误来源,我想知道我是否可以硬编码" 2"。

1 个答案:

答案 0 :(得分:0)

“2”的来源可能是 SystemMetrics

[DllImport("user32.dll")]
static extern int GetSystemMetrics(int smIndex);
...
var SM_CXBORDER = 5; // source http://referencesource.microsoft.com/#UIAutomationClientsideProviders/MS/Win32/NativeMethods.cs
    ...
Console.WriteLine(GetSystemMetrics(SM_CXBORDER));

输出为“1”

所以:

右侧边框1左边框+ 1

= 2