我想创建一个“窗口管理器”,这将认购开启/关闭的变化。 在这种情况下,您不必重载窗口类。 示例(为我工作)。
public class WindowsManager
{
static readonly List<Window> Windows=new List<Window>();
public static T CreateWindow<T>(T window) where T:Window
{
Windows.Add(window);
window.Closed += WindowClosed;
window.IsVisibleChanged += WindowIsVisibleChanged;
return window;
}
static void WindowIsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
var mainWindow = Application.Current.Windows.OfType<MainWindow>().Single();
mainWindow.Visibility = Equals(e.NewValue, true) ? Visibility.Hidden : Visibility.Visible;
}
static void WindowClosed(object sender, System.EventArgs e)
{
var window = (Window) sender;
window.Closed -= WindowClosed;
window.IsVisibleChanged -= WindowIsVisibleChanged;
Windows.Remove(window);
}
}
如何使用:
private void button1_Click(object sender, RoutedEventArgs e)
{
WindowsManager.CreateWindow(new Child1()).Show();
}
private void button2_Click(object sender, RoutedEventArgs e)
{
WindowsManager.CreateWindow(new Child2()).Show();
}
所以,当孩子窗口将关闭,WindowsManager将会收到相关通知,将在主窗口
UPD1更新的知名度。 添加要取消订阅的行VisibleChanged
您可以在第二个窗口的构造函数中传递mainwindow的实例。但是我不明白为什么你不回到主窗口就关闭第二个窗口? – Terry 2012-08-14 08:18:57
如果我关闭窗口不会加载所有的元素和数据,当用户再次点击按钮时,隐藏它,然后在主应用程序关闭时关闭它似乎是一个更好的主意......对吗? – Billy 2012-08-14 09:01:48
我不确定,即使不需要,您也将拥有内存中的所有数据。使用像Jon这样的面板会更好。 – Terry 2012-08-14 09:03:47