我这里有问题。 在项目A中我有一个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?
}
}
}
答案 0 :(得分:1)
将申请称为“WPF”有点令人困惑。
要关闭窗口,只需拨打Shutdown
Application
即可
Application.Current.Shutdown();
答案 1 :(得分: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;
}
}