2012-06-26 6 views

Antwort

7

Ich denke, Sie müssen warten, bis die Benutzeroberfläche gerendert wird, bis Sie versuchen, die Hwnd zuweisen. Versuchen Sie es stattdessen in den Event-Handler für Window.Loaded.

Das ist mir vorher passiert, ich hatte die Hwnd Zuweisung nach InitializeComponent() wurde im Code-Behind-Konstruktor aufgerufen. Es kam immer Null zurück, was vielleicht Sinn machte, als ich durchging und sah, dass die Benutzeroberfläche noch nicht erschienen war. Ich habe es in den _Loaded-Handler eingefügt und voila, die UI rendert, bevor sie auf diese Zeile trifft, und auf einmal wurde "this" nicht mehr null.

3

Die Antwort von WumpasTamer ist korrekt. Ich möchte nur ein schnelles Codebeispiel für alle anderen hinzufügen, die eine "schlüsselfertige" Lösung suchen. Wenn Sie WPF bereits verwenden, ist window nicht erforderlich, aber wenn Sie Winforms verwenden und PresentationSource verwenden möchten, müssen Sie dies verwenden.

void Main() 
{ 
    var window = new Window 
    { 
     Width = 0, 
     Height = 0, 
     WindowStyle = WindowStyle.None, 
     ShowInTaskbar = false, 
     ShowActivated = false 
    }; 
    window.Loaded += a_Loaded; 
    window.Show(); 
} 

void a_Loaded(object sender, EventArgs e) 
{ 
    var s = (Window) sender; 
    var source = PresentationSource.FromVisual(s); 
    //... 
    s.Close(); 
} 
3

Beginnend mit .NET 4.0 können Sie HwndSource zugreifen, ohne das Fenster zu zeigen, die ersten:

var helper = new WindowInteropHelper(this); 
var hwndSource = HwndSource.FromHwnd(helper.EnsureHandle()); 
+0

ich immer noch null von 'PresentationSource.FromVisual' nach' WindowInteropHelper.EnsureHandle' Aufruf. Es sieht so aus, als müsste ich das Fenster zeigen. 'FromVisual' muss andere interne Dinge erfordern, die faul erstellt werden, jenseits des Handles. –

+0

Warum verwenden Sie nicht stattdessen 'HwndSource.FromHwnd'? –

+0

Weil ich die Präsentationsquelle brauche, um auf das Zusammensetzungsziel zuzugreifen, um auf die Matrix zuzugreifen, um auf die DPI-Werte zuzugreifen. –