Bir WPF penceresinin tutamacını bulma


109

Windows formlarının win1.Handle özelliği vardı, hatırladığım takdirde ana pencere tutamacını döndürür?

WPF Penceresinin tutamacını almanın eşdeğer bir yolu var mı?

Aşağıdaki kodu çevrimiçi buldum,

IntPtr windowHandle = new WindowInteropHelper(Application.Current.MainWindow).Handle;

ancak bunun bana yardımcı olacağını sanmıyorum çünkü uygulamamın birden çok penceresi var.

Teşekkürler!!


24
Sana biraz dostça bir tavsiye vereyim Evan. Kargo kült programlama yapmayın! Çevrimiçi bulduğunuz kodu inceleyin. Application.Current.MainWindow'dan geçtiğini açıkça görebilirsiniz ve bundan, farklı bir pencereye bir referans göndererek cevabınızı alacağınıza neden olabilirsiniz. WindowInteropHelper'ı hiç kullanmadım, ancak yine de soruyu basitçe gerekçelendirerek cevaplayabiliyordum.
Gregory Higley

1
haklısın teşekkürler! Bugün yorgunum :).
Evan

5
Sorun değil! Ve bunu eleştiri olarak kastetmedim, sadece yardımcı olmak için. Hepimiz ara sıra küçük bir kargo taraması yaptık. :)
Gregory Higley

Yanıtlar:


142

Eh, Application.Current.MainWindowgeçmek yerine, istediğiniz pencereye bir referans verin: new WindowInteropHelper(this).Handlevb.


FileSave ortak iletişim kutusunun üst düzey bir pencereye referans aldığını keşfettim, böylece örneğin uygulamanın MainWindow'una bir referans iletebilirsiniz. Interop hizmetlerini gerçekten ihtiyacınız olduğunda saklayın.
David A. Gray

39

Pencerenizi WindowsInteropHelper sınıfıyla kullanmanız yeterlidir:

// ... Window myWindow = get your Window instance...
IntPtr windowHandle = new WindowInteropHelper(myWindow).Handle;

Şu anda, Uygulamanın her zaman bir tane olacağı ana penceresini istiyorsunuz. Bununla birlikte, bir System.Windows.Window türetilmiş Window sınıfı olması koşuluyla, herhangi bir Window üzerinde aynı tekniği kullanabilirsiniz.


8

kullanabilirsiniz :

Process.GetCurrentProcess().MainWindowHandle

3

Herhangi bir Windownedenle uygulamanızın TÜM'lerinin pencere tutamaçlarını istiyorsanız , Application.Windowsözelliği tüm Windows'a WindowInteropHandlerulaşmak için kullanabilir ve daha önce gösterdiğiniz gibi bunların tutamaçlarına ulaşmak için kullanabilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.