如何从另一个项目关闭wpf窗口

本文关键字:wpf 窗口 项目 另一个 | 更新日期: 2023-09-27 18:15:58

我这里有一个问题。在项目A中,我有一个wpf,我引用了项目B,在这个wpf中,我创建了一个在项目B中定义的窗体B。

当我关闭表单b时,我也想关闭wpf。

由于我已经在项目a中引用了项目B,我如何关闭wpf?

代码如下:

using projectB;
namespace projectA    
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            function();
        }
        public void function()
        {
            form = new formb();
            form.Show();
        }
    }
}

.

namespace projectB
{       
    public partial class formb : WinFormBase
    {
        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Dispose();
            // how to also close the wpf(MainWindow) here?
        }
    }
}

如何从另一个项目关闭wpf窗口

创建一个对象负责跟踪所有的窗口。确保该对象打开所有窗口。

把这些窗口列成一个列表,然后遍历列表关闭所有的窗口。

使用Application.Current.Shutdown可能导致窗口关闭而不保存状态。

尝试实现安全关闭。

创建一个全局事件,并让所有的窗口都收听它。当事件引发时,让每个窗口自行关闭。

public static class WindowManager
{
    public static event EventHandler<EventArgs> ClosingWindows;
    public static void CloseWindows()
    {
        var c = ClosingWindows;
        if (c != null)
        {
            c(null, EventArgs.Empty);
        }
    }
}

在每个窗口中注册此事件并响应它。注意,您必须决定何时调用WindowManager.CloseWindows方法。在本例中,它被放在按钮的单击处理程序中,但您可能还想将其添加到其他事件处理程序中(当用户按下Alt-F4或单击右上方的红色关闭按钮时发生的情况)

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
        // register for the other windows closing
        WindowManager.ClosingWindows += WindowManager_ClosingWindows;
    }
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        WindowManager.CloseWindows();
    }
    void WindowManager_ClosingWindows(object sender, EventArgs e)
    {
        // when other windows close, close this as well
        this.Close();
    }
    protected override void OnClosed(EventArgs e)
    {
        base.OnClosed(e);
        // when closed remove eventhandler
        WindowManager.ClosingWindows -= WindowManager_ClosingWindows;
    }
}

将应用程序称为" WPF"有点令人困惑。

要关闭窗口,只需在Application

上调用Shutdown
Application.Current.Shutdown();