Win32 etkinleştirme iletilerini kullanabilmem için bazı WPF pencerelerinin Win32 pencere tutamaçlarına erişmem gerekiyor. Win32 pencere tanıtıcısını almak için PresentationSource.FromVisual
veya WindowInteropHelper
kullanabileceğimi biliyorum, ancak WPF penceresi henüz oluşturulmamışsa sorunlara koşuyorum.WPF Penceresinin yerel Win32 tanıtıcısının oluşturulmasını zorlama
PresentationSource.FromVisual
kullanırsanız ve pencere oluşturulmadıysa, döndürülen PresentationSource
boştur. WindowInteropHelper
kullanıyor ve pencere oluşturulmamışsa, Handle
özelliği IntPtr.Zero
(boş) 'dir.
Tutamağa erişmeye çalışmadan önce pencerede this.Show()
ve this.Hide()
numaralı telefonu aramayı denedim. Daha sonra tutamağı alabilirim, ama pencere anlık olarak ekranda yanıp söner (çirkin!).
Bir WPF penceresinin oluşturulmasını zorlamanın bir yolu var mı? Windows Forms'da bu, Form.Handle
özelliğine erişim kadar kolaydı.
Düzeltme: Chris Taylor'un yanıtında bir varyantla devam ettim. İşte, durumunda başkasının yardımcı olur:
static void InitializeWindow(Window window)
{
// Get the current values of the properties we are going to change
double oldWidth = window.Width;
double oldHeight = window.Height;
WindowStyle oldWindowStyle = window.WindowStyle;
bool oldShowInTaskbar = window.ShowInTaskbar;
bool oldShowActivated = window.ShowActivated;
// Change the properties to make the window invisible
window.Width = 0;
window.Height = 0;
window.WindowStyle = WindowStyle.None;
window.ShowInTaskbar = false;
window.ShowActivated = false;
// Make WPF create the window's handle
window.Show();
window.Hide();
// Restore the old values
window.Width = oldWidth;
window.Height = oldHeight;
window.WindowStyle = oldWindowStyle;
window.ShowInTaskbar = oldShowInTaskbar;
window.ShowActivated = oldShowActivated;
}
// Use it like this:
InitializeWindow(myWpfWindow);
Bu soruyu gördünüz mü? - http://stackoverflow.com/questions/1556182/finding-the-handle-to-a-wpf-window - Pencerenin zaten mevcut olup olmadığından bahsedilmediği için yardımcı olmayabilir ya da değil. – ChrisF
@ChrisF: Teşekkürler! Evet, bunu gördüm. Ne yazık ki, henüz oluşturulmamış pencerede sorun var. –
Cevabınızı almak için bahsettiğimi düşünürdüm ki, eğer durumunuz farklı olsaydı, kopya olarak seçilmezdi. – ChrisF