0

我这里有问题。在项目 AI 中有一个 wpf,我提到了项目 B,在这个 wpf 中,我创建了一个在项目 B 中定义的 winform 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?
        }
    }
}
4

2 回答 2

1

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

要关闭窗口,只需Shutdown调用Application

Application.Current.Shutdown();
于 2013-05-28T19:54:27.963 回答
1

制作一个负责跟踪所有窗口的对象。确保此对象打开所有窗口。

将所有这些窗口放在一个列表中,然后遍历列表即可关闭所有窗口。

使用 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;
    }
}
于 2013-05-28T19:56:55.140 回答