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