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

标签 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);
}

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

但为什么只是显示窗口将其宽度增加到2
输出:

NaN  
0  
2  

可能是一些与 Windows 相关的限制,但我在哪里可以找到它的文档,例如msdn?

这是 AvalonDock 中窗口位置计算错误的根源,我想知道我是否可以对“2”进行硬编码。

最佳答案

“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.

关于c# - 为什么 (WPF) 窗口不是 0.0 像素宽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36624838/

相关文章:

wpf - 保存 WPF StackPanel 子项

window - 单击窗口上的特定位置,单击特定按钮并控制窗口是否更改

html - 当窗口调整大小时更改 div 大小以进行缩放

C#打印函数隐藏窗口

c# - 触发属性更改事件的更短代码

c# - 将项目从文本框添加到列表框

c# - 在 Debug模式下运行 Visual Studio 控制台应用程序占用的 CPU 使用率不超过 50%

c# - 用 Mono.Cecil 替换类

c# - 为什么这个数据绑定(bind)不改变 GridUnitType?

C# 在运行时获取定义字典的类型