2016-04-14 76 views
2

開始一個空白WpfApplication並粘貼這App類:爲什麼(WPF)窗口不是0.0像素寬?

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窗口布局計算中的一個bug的來源,我想知道我是否可以對「2」進行硬編碼。

+0

嘗試使用'w.MaxWidth'來限制寬度(而不是'MinWidth')。 – Sinatr

+0

@Sinatr增加'w.MaxWidth = 0.0;'沒有區別。此外,窗口應該能夠在稍後變寬,但初始放置計算依賴於_wrong或weird_初始的'Width'值。 – jan

+1

這是相當複雜的和大量的錯誤修復的主題。但它發生[這裏](http://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Window.cs,aff832999c41291b)。 –

回答

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爲右邊界= 2左邊框+ 1