在C# WebAPI中,參數是用於接收和處理HTTP請求中傳遞的數據的方式。WebAPI支持不同類型的參數,包括路由參數、查詢字元串參數、請求體參數和標頭參數。以下是一些常用的WebAPI參數類型: 路由參數(Route Parameters): 路由參數從URL的路徑中提取值。在WebAPI中,通 ...
How to close parent windows using WPF User Control
如何使用 WPF 用戶控制項關閉父視窗
【問題描述】
假設有兩個WPF視窗:window1和window2。
window1有一個按鈕,單擊此按鈕將打開window2。window2包含一個用戶控制項。此用戶控制項有一個用於關閉window2的按鈕。
怎樣才能實現這個場景呢?
【解決方案1】
在創建的自定義控制項中,從按鈕事件單擊中訪問父視窗。
簡單地說:
var myWindow = Window.GetWindow(this);
myWindow.Close();
或者使用可視化樹:
var myWindow = (Window)VisualParent.GetSelfAndAncestors().FirstOrDefault(a=>a is Window);
myWindow.Close();
當然,另一種時創建一個顯示”MyButtonClicked“的自定義事件,然後讓承載UserControl的視窗監聽此事件,併在觸發事件時關閉當前視窗。
[解決方案2] (討論 )
實現此功能時為了在window2打開時關閉window1,但如果你將這些代碼放在相應的區域中,它應該可以在任何情況下從任何地方關閉任何視窗:
創建一個存儲Window對象的類,以及一個將關閉它的函數:
CloseWindow.cs
public static class CloseWindow{
public static Window WinObject;
public static void CloseParent(){
try{
((Window)WinObjcet).Close();
}catch(Exception ex)
{
string value = e.Message.ToString(); //do whatever with this
}
}
}
在父視窗(您要關閉的視窗-window2,在這種情況?)中,在其onload事件中,將其Window對象設置為等於CloseWindow.WinObject:
CloseWindow.WinObject = (Window)this;
然後,在孩子的onLoad事件中(或者,在OP的情況下,在Window2的用戶控制項的按鈕事件中),讓它執行CloseParent()函數:
if(CloseWindow.WinObject != null)
{
CloseWindow.CloseParent();
}
【討論】【參考方案3】:
您可以嘗試使用 EventAggregator 在不同的 ViewModel 中實現此事件驅動邏輯。
http://www.codeproject.com/Articles/355473/Prism-EventAggregator-Sample
以上是關於如何使用 WPF 用戶控制項關閉父視窗的主要內容,如果未能解決你的問題,請參考以下文章
如何從作為wpf mvvm模式中的視窗打開的視圖模型中關閉用戶控制項?
在 WPF 中使用 WebBrowser 關閉視窗後音頻繼續播放