![](/img/trans.png)
[英]how to close window form which is hosting WPF user control from within a WPF user control
[英]How to get an instance of hosting WinForm from a WPF user control?
我有一個WPF UserControl
,它可以托管在WPF窗口或Windows Forms Form
。 當用戶按下“ X”按鈕以關閉托管窗口/窗體時,我想獲取此關閉事件並執行一些操作。
為此,我已訂閱UserControl
的加載事件以獲取托管Windows /窗體實例並訂閱其關閉事件。
使用WPF窗口可以正常工作,但是當我嘗試使用Form
進行相同操作時,出現錯誤,無法繼續。
WPFUsercontrol.xaml.cs
private void WpfUsercontrol_OnLoaded(object sender, RoutedEventArgs e)
{
Window window = Window.GetWindow(this);
if (window != null)
window.Closing += window_closing;
Form form = this.Parent as Form;
//Error: Cannot convert from System.Windows.DependencyObject to System.Windows.Forms.Form
}
如何獲得與使用WPF窗口相同的關閉Form
功能?
您不能僅將WPF UserControl
的父對象強制轉換為System.Windows.Forms.Form
即使該控件托管在Windows Forms Form
,因為托管並不是那么簡單,並且需要額外的“黑魔法”。
相反,您必須首先獲取HwndSource
並獲取其ElementHost
實例。 有了它,您可以訪問TopLevelControl
,這將是您要查找的Form
。
var hwndSource = (HwndSource)PresentationSource.FromDependencyObject(this);
var host = (ElementHost)Control.FromChildHandle(hwndSource.Handle);
Form form = (Form)host.TopLevelControl;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.