Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 显示WPF窗口代替另一个窗口,不显示/关闭_C#_Wpf_Window - Fatal编程技术网

C# 显示WPF窗口代替另一个窗口,不显示/关闭

C# 显示WPF窗口代替另一个窗口,不显示/关闭,c#,wpf,window,C#,Wpf,Window,通过调用windowA.Close()和windowB.Show(),我的项目可以在几个WPF窗口之间切换。我需要的变化发生没有任何过渡(即一个窗口关闭和另一个打开动画)。当然,我可以用多个窗口的功能创建一个非常混乱的窗口,但是有没有更简单的方法呢?MVVM模式是一种很好的方法。您可以将一个外部窗口作为一个外壳,其中包含一个用户控件,用于交换表示windowA和windowB功能的用户控件。在回答中,实现MVVM的内容有点多;这是一个基本实现的好主意,对于您正在尝试做的事情来说已经足够了 这假定

通过调用windowA.Close()和windowB.Show(),我的项目可以在几个WPF窗口之间切换。我需要的变化发生没有任何过渡(即一个窗口关闭和另一个打开动画)。当然,我可以用多个窗口的功能创建一个非常混乱的窗口,但是有没有更简单的方法呢?

MVVM模式是一种很好的方法。您可以将一个外部窗口作为一个外壳,其中包含一个用户控件,用于交换表示windowA和windowB功能的用户控件。在回答中,实现MVVM的内容有点多;这是一个基本实现的好主意,对于您正在尝试做的事情来说已经足够了

这假定:

1) 您正在实现MVVM,并且

2) 主“shell”窗口有一个视图模型和窗口,而“子窗口”有一个视图模型和用户控件

无论如何,在主窗口的视图模型中,子视图的视图模型需要一个属性,如下所示:

 private object currentView;
 public object CurrentView
 {
     get{ return this.currentView;}
     set 
     { 
          this.currentView = value;
          RaisePropertyChanged("CurrentView"); //assumes you've implemented an MVVM pattern with a method to notify the view when a property has changed like the link above
     }     
然后,在XAML中,为以下视图中的每个子视图添加数据模板:

这意味着,“如果此视图中的某个对象绑定了一个值为WindowAViewModel的属性,则在其位置显示WindowAView。”

然后将ContentControl绑定到CurrentView属性:

<ContentControl Content="{Binding CurrentView}"/>

由于属性设置为在更改时通知,因此它会通知视图CurrentView中有新内容,并且数据模板会告诉主窗口要为新内容呈现什么。

使用或而不是多个窗口不是更自然吗?一次只能显示一个窗口,所以我不这么认为。你认为我还是应该用其中一个来代替吗?
 this.CurrentView = new WindowAViewModel(); //along with whatever initialization needs to occur