簡體   English   中英

如何使用WPF用戶控件關閉父窗口

[英]How to close parent windows using WPF User Control

假設我有兩個WPF窗口:window_One和window_Two。

  • window_One有一個按鈕。 單擊此按鈕將打開window_Two。
  • window_Two包含一個用戶控件。
    • 該用戶控件有一個關閉window_Two的按鈕。

我該如何實現這種情況?

在您創建的自定義控件內。 您可以在按鈕事件單擊中訪問父窗口。

通過使用可視樹:

var myWindow = (Window)VisualParent.GetSelfAndAncestors().FirstOrDefault(a => a is Window);
myWindow.Close();

或簡單地說:

var myWindow = Window.GetWindow(this);
myWindow.Close();

當然,另一種選擇是創建一個自定義事件,顯示“MyButtonClicked”,然后讓托管UserControl的窗口監聽此事件,當事件被觸發時,關閉當前窗口。

干杯!

您可以嘗試使用EventAggregator在不同的ViewModel上實現此事件驅動的邏輯。

http://www.codeproject.com/Articles/355473/Prism-EventAggregator-Sample

我們實現了這個來關閉Window2從Window2打開,但它應該適用於任何場景,如果你將這些代碼部分放在適當的區域,從任何地方關閉任何窗口:

創建一個存儲Window對象的類,以及一個關閉它的函數:

CloseWindow.cs

public static class CloseWindow
{
    public static Window WinObject;

    public static void CloseParent()
    {
        try
        {
            ((Window)WinObject).Close();
        }
        catch (Exception e)
        {
            string value = e.Message.ToString(); // do whatever with this
        }
    }
}

在父窗口(要關閉的窗口 - 在這種情況下為Window2?)中,在其onload事件中,將其Window對象設置為CloseWindow.WinObject

CloseWindow.WinObject = (Window)this;

然后,在child的onload事件中(或者,在OP的情況下,在Window2的User Control的按鈕事件中),讓它執行CloseParent()函數:

if (CloseWindow.WinObject != null)
    CloseWindow.CloseParent();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM