如何使用WPF 进行界面切换

首先我们考虑界面切换之间的组件类型,是窗口还是用户控件?可以有三种方式:

  1. 窗口 —> 窗口
  2. 窗口加载用户控件
  3. 同一个窗口下,清除某些用户控件,加载某些用户控件

窗口切换窗口

这个网上有很多很容易搜到的办法,用窗口的Close()和Show似乎就能解决了。

窗口加载用户组件

应用场景

常见于菜单栏点击不同按钮,切换不同的界面。例如: 界面显示

常见应用场景:**管理系统。同理,把菜单栏放在下面,我们可以做到类似微信那样的界面,菜单栏在下方。

实现方法

  1. 创建用户组件UserControl(例如:UserControlTest.xaml)(项目右击->新建项->用户组件)
  2. 在主窗口创建好一个容器,常用grid,并且命名(例如:gridExample)
  3. 加载方法:后台代码中使用gridExample.Children的方法(即Grid的继承类的方法?),使用gridExample.Children.Clear();可以清理这个容器里的控件;使用gridExample.Children.ADD(new UserControlTest());
  4. 清除的方法意思很明显,不多解释;添加的逻辑是,先新建一个组件对象UserControlTest,然后再把这个组件放在我们之前创建的Grid容器(gridExample)里面。

组件切换组件

使用场景: 还是这图作为例子吧。加入我们对下面数据栏的某一条消息感兴趣,想点开看,然后这个详细信息就显示在右边,即将原来右边的所有东西清除,放入新的组件。

这里我思考的核心的问题是:如何在用户组件中获取主窗口的控件使用。如果我们在我们定义的用户组件中,可以像上一点那样,使用gridExample.Children.Clear()和gridExample.Children.ADD(new 我们新定义的用户组件)那就好了。

事实上是可以的。我们通过

var w = Window.GetWindow(btn1);

其中,btn1是当前用户组件的某个按钮。这句话的意思就是,我们查询当前组件所处窗体,并用w引用它。知道窗口名字,那我们就可以去找它的组件啦。不过我们不能直接引用。我们需要通过寻找,再引用。

var g = w.FindName("window_grid") as Grid;
g.Children.Clear();

之后就可以ADD()啦。注意:直接写w.window_gridChildren.Clear()是会报错的。hhhhh

我对此的理解:主窗口的组件是私有的,但也不是完全不能找到的。我们只能通过FindName的方法去间接的寻找到这个组件。


本文章使用limfx的vscode插件快速发布