【发布时间】:2013-11-03 09:38:19
【问题描述】:
我正在使用设计模式 MVVM 在 WPF 中做一个应用程序。 我有全尺寸窗口(不仅最大化而且全尺寸)。
我需要将一个窗口切换到另一个(在窗口 A 中按下按钮 x 打开窗口 B,并在显示窗口 B 时关闭窗口 A)。
在窗口 B 的加载事件中,我正在关闭窗口 A,但在显示窗口 B 之前,我仍然可以看到桌面一段时间。
不看桌面怎么办?
【问题讨论】:
标签: wpf mvvm window fullscreen
我正在使用设计模式 MVVM 在 WPF 中做一个应用程序。 我有全尺寸窗口(不仅最大化而且全尺寸)。
我需要将一个窗口切换到另一个(在窗口 A 中按下按钮 x 打开窗口 B,并在显示窗口 B 时关闭窗口 A)。
在窗口 B 的加载事件中,我正在关闭窗口 A,但在显示窗口 B 之前,我仍然可以看到桌面一段时间。
不看桌面怎么办?
【问题讨论】:
标签: wpf mvvm window fullscreen
您可以拥有一个带有ContentControl 的窗口,而不是在窗口之间切换。您需要做的就是更改其Content 属性以在视图之间切换。
我还建议您查看内置此类功能的Prism library,尤其是其navigation documentation。
【讨论】:
您可以制作 2 个单独的用户控件,并将每个窗口的内容放在一个用户控件中。
在您的主窗口中,您可以定义数据模板,这些模板将根据当前的Datacontext决定要使用的视图
<Window.Resources>
<DataTemplate DataType="{x:Type viewmodels:viewmodel1}" >
<views:Usercontrol1/>
</DataTemplate>
<DataTemplate DataType="{x:Type viewmodels:viewmodel2}" >
<views:Usercontrol2/>
</DataTemplate>
</Window.Resources>
然后您创建一个MainViewModel 并定义currentviewmodel 和viewmodel1 和viewmodel2 以及一个将更改currentviewmodel 的命令,然后将MainWindow 的Datacontext 设置为MainViewModel。
在您的 MainWindow 中,您将按钮绑定到该命令,然后您只需让命令更改 currentviewmodel 并在您的 MainWindow 内
<Button Content="change grid data context" Command="{Binding yourCommand}"/>
<Grid DataContext="{Binding currentviewmodel}"/>
您不必担心要使用哪个视图,当 DataContext 设置时,DataTemplates 会定义要使用的视图
【讨论】: