WPF - 切换多个窗口的可见性

时间:2012-08-14 08:10:08

标签: wpf windows user-interface

我将首先解释我的WPF应用程序的UI。

我创建了一个窗口,其中包含许多按钮,这些按钮始终对用户可见(让我们称之为主窗口),每个按钮将打开一个与任务相关的新窗口。我想要做的是,每当点击一个按钮时,主窗口应该被隐藏(可见性:折叠),并且应该显示新窗口。第二个窗口还将包含一个按钮,该按钮将隐藏第二个窗口并显示主窗口。 根据与之相关的命令,将要打开的第二个窗口将具有不同的尺寸,因此我将为eaach提供不同的窗口

TLDR我希望能够在多个窗口之间切换,一次只能看到一个窗口,如何管理多个窗口之间的切换?

注意:我可以从主窗口显示第二个窗口,但是从第二个窗口显示main是什么...无法得到它....或者如果有人能告诉我一个不同的方法来实现它:其他而不是多个窗口

此外,这是UI的扩展,我希望在此页面上显示这种结晶的按钮:http://postimage.org/image/4yibiulsh/ 任何人都可以指导我正确的实现,我已经通过许多网站,并试图通过混合创建这些,但我只是不是一个UI人....请帮助这个 提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用多种方法。

轻松切换回主窗口:将MainWindow的引用注入SecondWindow(或任何其他要显示的窗口),然后在该窗口的Closing Event中将MainWindow的Visibility设置为Visible。 / p>

您是否还考虑过将所有内容保存在同一个窗口中,但是您设置了可见和不可见的不同面板?这可能会产生同样的效果,但它不那么复杂......

希望有帮助...

答案 1 :(得分:1)

我会创建一个“窗口管理器”,它将订阅打开/关闭的更改。 在这种情况下,您不必重载Window类。 示例(为我工作)。

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