2016-04-14 9 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ウィンドウが「Width」から「2」に増加するのですか?
出力:

NaN 
0 
2 

おそらくいくつかのWindows関連の制限が、私は、これは、例えばに記載見つけることができますmsdn?

これはAvalonDockのウィンドウ配置計算のバグの原因です。「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です:

1右の境界= 2のための左の境界+ 1用:

[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"

です。

関連する問題