我做了一个基于用户交互打开连续窗口的WPF应用程序。例如,第一个winodw询问用户想要处理什么模块,当做出选择并按下按钮时,打开一个新窗口,显示一些供应商和摘要计数。选择其中一个供应商并按“编辑”按钮打开另一个窗口,其中显示该供应商的详细信息。点击一个细节,然后点击一个按钮打开另一个窗口,用户可以在其中更改一些数字等。然后用户关闭该窗口,选择不同的项目并编辑,或关闭该窗口并选择不同的供应商等。每个窗口都有自己的窗口目前查看模型。我想摆脱所有的窗口层。选项卡控制似乎不是一个好的选择,因为用户将不得不通过正确的序列等。什么是最好的方法来改变这只使用一个窗口,并换出用户在一个窗口中看到的当他,例如,按下按钮编辑等?转换我的多窗口WPF应用程序到一个窗口?
回答
我个人更喜欢使用<ContentControl />
我的内容区域,并根据用户当前的“窗口”
我有an example on my blog你可以看看那个,但基本组成部分看起来像换出活动内容这样的:
视图模型:
ObservableCollection<IViewModel> AvailableScreens;
IViewModel ActiveScreen;
ICommand SetActiveScreenCommand;
有了一些XAML看起来像这样:
<ContentControl Content="{Binding ActiveScreen}" />
而且我通常使用DataTemplates
告诉WPF如何绘制每个视图模型
<Window.Resources>
<DataTemplate DataType="{x:Type local:ModulesViewModel}">
<local:ModulesView />
</DataTemplate>
<DataTemplate DataType="{x:Type local:VendorsViewModel}">
<local:VendorView />
</DataTemplate>
<DataTemplate DataType="{x:Type local:EditVendorViewModel}">
<local:EditVendorView />
</DataTemplate>
</Window.Resources>
谢谢蕾切尔我会尝试这个,这似乎基本上是我想要做的 – 2013-03-12 16:03:33
Rachel-你有什么技巧可以让ChangePageCommand可用于每个UserControl中的按钮吗?我的情况是我的DockPanel中的按钮不像您的博客中的示例,我需要在UserCOntrols中拥有按钮才能更改ContentControl的内容。因此,而不是一个绑定到DataContext.ChangePageCommand,RelativeSource = {RelativeSource AncestoryType = {x:Type Window}}}的按钮我可以在每个UserControl中调用ChangePageCommand? – 2013-03-13 12:37:26
@ user1029770如果您无法在ViewModel图层中找到构建命令的方法(例如“ParentViewModel”设置为“ChildViewModel”。ChangePageCommand'),然后我通常使用某种类型的消息系统,如PRISM的'EventAggregator'或MVVM Light的'Messenger'。如果您有兴趣,我可以在我的博客上简要介绍一下[邮件系统概述](http://rachel53461.wordpress.com/2011/06/05/communication-between-viewmodels-with-mvvm/)。基本上你的主ViewModel会订阅接收'ChangePageEvents',你可以从程序中的任何地方广播一个'ChangePageEvent' – Rachel 2013-03-13 12:40:24
您可以使用模拟Visual Studio行为的对接框架,如AvalonDock。
无论如何,它不是关于可停靠窗口的主题(问题),他可以使用分隔符,树视图和上下文编辑器(例如VS选项窗口)来实现它(例如)。没有什么可以在那里停靠... – 2013-03-12 14:27:07
好的,有没有任何如何做到这一点的例子? – 2013-03-12 14:30:51
我问了那个User Experience stackechange网站上的问题,它立即被投票表决,所以... – 2013-03-12 14:42:39
- 1. 转换窗口桌面应用程序到窗口服务
- 2. addChild我的窗口到其他应用程序的窗口
- 3. 多窗口应用程序
- 4. 如何在一个WPF应用程序中有多个窗口?
- 5. 将WPF窗口附加到另一个进程的窗口
- 6. WPF如何设计一个多窗口应用程序?
- 7. WPF C#应用程序我得到2个主窗口
- 8. Facebook应用程序在窗口中显示一个窗口
- 9. 如何在多窗口WPF应用程序中切换ViewModels?
- 10. z-order应用程序窗口 - WPF
- 11. 在应用程序中的多个WPF弹出窗口
- 12. 在另一个wpf窗口内部有一个wpf窗口
- 13. 合并多个窗口,一个窗口
- 14. 多窗口程序
- 15. 看不到我的第一个窗口应用程序
- 16. 两个窗口在一个WPF应用程序
- 17. WPF覆盖多个窗口
- 18. 从C#中的另一个应用程序显示WPF窗口#
- 19. 在一个窗口中的WPF应用程序
- 20. 在一个窗口中的WPF应用程序
- 21. 另一个WPF窗口前面的WPF窗口
- 22. 响应WPF窗口
- 23. 强制窗口交换应用程序
- 24. WPF镜像应用程序到两个窗口?
- 25. C#窗口应用程序
- 26. 应用程序窗口
- 27. 如何在wpf多线程应用程序中访问窗口
- 28. 触发事件从另一个WPF窗口WPF窗口
- 29. 多窗口mac应用程序
- 30. Java FX多窗口应用程序
这是另一个StackExchange网站一个很好的问题:用户体验(http://ux.stackexchange.com/users/13161/ ) – 2013-03-12 14:24:53
这是一个很好的解决方案,使一个主容器,然后浏览您的窗口或不?如果是这样,你可以尝试使用'UserControl',它允许你导航。 – Sonhja 2013-03-12 14:39:58
任何人都可以告诉我,如果一个框架页面或用户控件将是合适的。可能是一个例子?谢谢 – 2013-03-12 14:40:16