2016-04-14 27 views
2

Başlangıç ​​ve sınıf App bu yapıştırın:Neden (WPF) Penceresi 0,0 piksel genişliğinde değil? Boş WpfApplication ile

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

Bu sadece yeni bir boş pencere (siyah çizgi) oluşturur.

Ancak pencere neden Show penceresinin neden Width değerini 2?
Çıktı: Ben nerede bulabilirim Muhtemelen

NaN 
0 
2 

bazı Windows ile ilgili sınırlama, ancak bu örneğin belgelenen msdn?

Bu, AvalonDock'ta pencere yerleştirme hesaplamasında bir hata kaynağı ve "2" kodunun sabit olup olmadığını merak ediyordum.

+0

Genişliği sınırlamak için 'w.MaxWidth' kullanılmaya çalışılır (' MinWidth'). – Sinatr

+0

@Sinatr 'w.MaxWidth = 0.0 'ifadesini ekleyerek fark yaratmaz. Ayrıca, pencere daha sonra daha geniş olabilir, ancak ilk yerleştirme hesaplamaları bu _wrong veya weird_ initial 'Width' değerine güvenir. – jan

+1

Oldukça sarsılmış ve çok sayıda hata düzeltmesinin konusu. Ama bu [burada] olur (http://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Window.cs,aff832999c41291b). –

cevap

0

"2" kaynak muhtemelenSystemMetrics geçerli:

1 sağ sınırında = 2 için sol sınırdan + 1 için:

[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)); 

Çıktı Yani "1"

olduğunu.