0

我正在使用 WPF 重新设计我的 WinForms 应用程序,我只参加了 2 周的项目,并且很快了解到我需要的许多控件都不需要自定义控件,而 WPF 允许我轻松设计这些控件。

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

这个想法是显示登录,在验证后显示菜单,然后如果它关闭,则在主窗口内登录,这将是全屏。

为了使功能正常工作,我简单地使用 WindowStyle="none" 创建了登录和菜单表单并将其居中放置在屏幕上,这显然不起作用,因为仍有一个表单但未链接到主表单。

在 winforms 中我使用了 MDI,但阅读了这个论坛并查看了 MDI 不赞成的问题,我查看了选项卡控件。到目前为止,我可以找到有关使用 1 表单显示它的教程,但找不到适合登录>菜单>登录的教程

我不想被灌输,这个项目只是一个尝试掌握 WPF 的实践项目,但是有很多与该主题相关的问题,每个人都以不同的方式处理它。

谢谢

4

2 回答 2

2

在不创建过于复杂的答案的情况下,也不包括对您来说显然是新的概念,例如DelegateCommand (s) 或WindowManager (s),这是一个全屏应用程序的简单示例,显示了许多不同的“子窗口”(不是Windows 本身,而是 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;
    }
}

登录视图:

<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>

菜单视图:

<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>

这就是所谓的“视图优先”方法,其中视图通过负责实例化其他视图并使它们可见来指示应用程序的“流程”。


话虽如此,我会花一点时间来解决你的断言

每个人的处理方式都不一样

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

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

底线:没有确定的“正确方法”来处理 WPF 中的 View 和 ViewModel 实例化/管理之类的事情,这取决于您选择的 MVVM 框架和项目的具体情况,例如对可测试性的需求。

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

于 2013-09-30T03:42:06.767 回答
0

与其考虑“表单”和“窗口”,不如考虑如何设计这个应用程序,就好像它是一个 Web 应用程序一样。登录“屏幕”可以简单地是放置在其他所有内容之上的用户控件,以防止用户在显示时与下面的任何控件进行交互。

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

于 2013-09-30T02:38:41.430 回答