WPF全屏(MDI)但不是MDI

时间:2013-09-30 02:22:23

标签: c# wpf

我正在使用WPF重新设计我的WinForms应用程序,我只有2周的时间进入该项目并很快了解到我需要的许多控件都需要自定义控件,而WPF允许我轻松地设计它们。

到目前为止,我有一个MainWindow.xaml,Login.xaml和Menu.xaml,

这个想法是显示登录信息,在验证后显示菜单,然后是否关闭以在主窗口内登录,这将是全屏。

为了使功能正常工作,我只需使用WindowStyle =“none”创建登录和菜单表单并将其居中到屏幕,这显然不起作用,因为仍然有一个表单但没有链接到主表单。

在winforms中,我使用了MDI,但是在阅读这个论坛并查看问题时MDI不满意,我查看了tab控件。到目前为止,我可以找到使用1个表单来显示它的教程,但找不到合适的登录教程> menu> login

我不想被骗,这个项目只是一个尝试和掌握WPF的练习项目,但是有很多关于这个主题的问题,每个人都以不同的方式处理它。

由于

2 个答案:

答案 0 :(得分:2)

如果没有创建过于复杂的答案,并且不包含DelegateCommand(s)或WindowManager(s)等对您来说显而易见的概念,这是Fullscreen应用程序的一个简单示例显示许多不同的“子窗口”(本身不是窗口,而是UserControls)

主窗口:

<Window x:Class="FullScreenAppSample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        WindowState="Maximized"
        WindowStyle="None">
</Window>

代码背后:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void ShowLogin()
    {
        var loginview = new LoginView();
        this.Content = loginview;
    }

    private void ShowMenu()
    {
        var menu = new MenuView();
        this.Content = menu;
    }
}

LoginView:

<UserControl x:Class="FullScreenAppSample.Login.LoginView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
   <!-- your login screen UI here -->
</UserControl>

MenuView:

<UserControl x:Class="FullScreenAppSample.Menu.MenuView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
   <!-- your Menu UI here -->
</UserControl>

这就是所谓的“View First”方法,其中View通过承担实例化其他视图并使其可见的责任来规定应用程序的“流程”。


话虽这么说,我会花一点时间来解决你的断言

  

每个人都以不同的方式处理

是。创建WPF应用程序的主流方法是MVVM,它被设想为Martin Fowler's Presentation Model的WPF特定版本。然而,有许多解释和MVVM的许多不同版本,以及许多MVVM Frameworks,例如MVVM LightCaliburn.Micro和Microsoft的Prism(以及其他许多版本) )。

这些框架中的每一个都提供基本工具(基类,辅助类,服务,抽象,事件聚合器等等),以简化大规模,复杂的WPF应用程序的开发。

结论:在WPF中没有明确的“正确方法”来处理View和ViewModel实例化/管理之类的事情,这取决于您的choice of MVVM Framework和项目的细节,例如需要可测试性

我个人已经从几个不同的框架中获取了各种部件和组件(以及概念),并构建了我自己的ViewModel-first MVVM方法。我建议您花一些时间来分析您的项目要求,并考虑是否使用其中任何一项。

答案 1 :(得分:0)

不要考虑“表单”和“窗口”,而是考虑如何将此应用程序设计为Web应用程序。登录“屏幕”可以简单地是放在其他所有内容之上的用户控件,以防止用户在显示时与下面的任何控件交互。

也不要直接引用彼此之间的控件。而是将事件添加到每个用户控件,并将它们绑定到MainWindow中其他控件中的相应方法。