1

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

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

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

注意:我可以从主窗口显示第二个窗口,但是从第二个窗口显示主窗口怎么样......无法得到它......或者如果有人可以向我展示一种不同的方法来实现这个:除了多个窗口

此外,这是对 UI 的扩展,我想在此页面上以这种结晶形式显示按钮:http ://postimage.org/image/4yibiulsh/ 任何人都可以指导我进行正确的实现,我有浏览过许多站点,也尝试通过混合创建这些站点,但我不是 UI 人员....请在此先感谢您的帮助。

4

2 回答 2

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 取消订阅的行

于 2012-08-14T09:11:37.900 回答
1

您可以为此使用多种方法。

要轻松切换回主窗口:将 MainWindow 的引用注入您的 SecondWindow(或您要显示的任何其他窗口),并在该窗口的关闭事件中将 MainWindow 的可见性设置回可见。

您是否也考虑过将所有内容都保留在同一个窗口中,但设置不同的面板来设置可见和不可见?这可能具有相同的效果,但它不那么复杂......

希望有帮助...

于 2012-08-14T08:22:40.803 回答