学习WPF与WinForms

380 阅读5分钟

WPF与WinForms

Windows Presentation Foundation(WPF)和Windows Forms Applications(WinForms)是图形用户界面,开发者可以用它们来构建Windows桌面程序。

在本教程中,我们将使用WPF和WinForms创建应用程序,以了解它们的相似性和差异。

前提条件

要跟上本教程,你需要。

  • 对C#有一定的了解。
  • 安装了[Visual Studio]。

什么是WinForms?

在2002年2月,微软宣布WinForms是一个基于GUI的替代.NET Framework。

WinForms使开发人员能够将控件拖放到Windows Form上,并使用C#VB.NET或任何其他*.NET*语言编写的代码来修改这些组件。

由于WinForms是一个C++类集合的包装,每个WinForms控件都是该类的一个实例。

开发人员可以从微软的Visual Studio IDE的工具箱中快速拖放控件。这使得使用WinForms的工作变得简单。

因此,WinForms是.NET框架中的一个图形库,可以让开发者用事件驱动的设计来构建丰富的客户端应用程序。

创建一个WinForms应用程序

假设我们已经安装了Visual Studio,我们可以在解决方案资源管理器中创建一个新的项目,从列表中选择WinForms应用程序

你可以根据你的需要改变表单的名称。在我们的例子中,它将保持为Form1.cs

创建项目后,你会注意到Visual Studio创建了Form1.cs 文件并生成了Program.cs 文件。

Visual Studio Window

从我们的工具箱窗口,我们可以拖放一个文本框、标签和按钮。

window-after buttons

通过双击添加按钮,让我们加入以下代码。

private void button1_Click(object sender, EventArgs e)
{
    var y = Convert.ToInt32(textBox1.Text);
    var x = Convert.ToInt32(textBox2.Text);
    var z = y + x;
    textBox3.Text = z.ToString();
}

从上面的代码中,我们已经声明了两个变量,它们接受两个输入,将它们相加,然后在一个文本框中显示结果。

在接受输入时,我们必须将字符串转换为整数。

当我们运行应用程序时,它提示输入两个数字,点击添加按钮后,显示结果。

Results after adding two numbers

控件在Windows窗体中很容易被采用,这使得它们易于使用。然而,在设计时,不应该利用Windows窗体。

这是因为WinForms中每个事件和过程的代码都与UI元素紧密相连。

即使你利用了WinForms中的可视化设计器,你的表单的设计器扩展组件也有以你选择的语言生成的布局代码。例如,C#,VB.NET,或C++。

如果没有这些代码,你就无法单独构建表单。这意味着,要创建UI,你必须熟悉所选的语言。

什么是WPF?

微软在2007年推出了Windows Presentation Foundation(WPF),它取代了Windows Form。从那时起,桌面应用程序的创建发生了很大的变化。

WPF允许开发者创建事件驱动的富客户端应用程序,在Windows操作系统上使用。

WPF可以用于开发和设计Windows应用程序和Web应用程序,而WinForms只能用于开发和设计Windows应用程序

XAML(可扩展应用标记语言)被WPF用来定义WPF应用程序的用户界面。XAML是一种声明性的语言,描述了WPF应用程序的用户界面。

在WPF中,用户界面和代码可以被单独创建和组织。WPF中的用户界面是基于XAML的,它是可扩展的,允许你设计一个特定的界面,而不知道它是用C#还是VB.NET编写的。

因此,完整的UI设计可以(但不是必须)由不熟悉编程语言的人完成。

WPF带有对广泛的视频格式、记录、3D材料和大量内置动画的支持,而与WPF相比,WinForms并没有提供很多丰富的、互动的、动画的、硬件加速的、矢量的2D和3D功能。

创建一个WPF应用程序

让我们从在解决方案探索器中创建一个新的项目开始。这里,我们将从列表中选择WPF

Visual Studio为你创建了两个XAML文件(App.xamlMainWindow.xaml)和两个相应的*C#*文件(App.xaml.csMainWindow.xaml.cs)。

creating wpf project

一个WPF应用程序的布局如上图所示,设计器旁边是XAML文件。

WPF和WinForms之间是有区别的。WPF利用XAML来定义WPF应用程序的用户界面,而WinForms提供了对本地windows常用控件库的访问。

请注意,我们可以手动添加一个文本框、标签和按钮到相关的XAML文件。例如,我们可以在WPF中使用以下代码在MainWindow.xaml 文件中添加一个按钮。

<Window x:Class="addingTwoNumbers.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:addingTwoNumbers"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid HorizontalAlignment="Left" Width="815">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="0*"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Button x:Name = "add_click" Content="Add" HorizontalAlignment="Left" Margin="254,217,0,0" VerticalAlignment="Top" Height="35" Width="92" Grid.ColumnSpan="2"/>
    </Grid>
</Window>

在现实中,我们也可以将控件拖放到设计器窗口中。相关的XAML文件也会被更新。让我们在XAML文件中添加一个文本框、标签和按钮。

<Window x:Class="addingTwoNumbers.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:addingTwoNumbers"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid HorizontalAlignment="Left" Width="815">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="0*"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <TextBox x:Name = "firstnumber" HorizontalAlignment="Left" Margin="200,113,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="200" Height="34" Grid.ColumnSpan="2"/>
        <TextBox x:Name = "secondnumber" HorizontalAlignment="Left" Margin="200,168,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="200" Height="34" Grid.ColumnSpan="2"/>
        <Button x:Name = "add_click" Content="Add" HorizontalAlignment="Left" Margin="254,217,0,0" VerticalAlignment="Top" Height="35" Width="92" Grid.ColumnSpan="2"/>
        <Label Content="First number" HorizontalAlignment="Left" Margin="104,121,0,0" VerticalAlignment="Top" Grid.ColumnSpan="2"/>
        <Label Content="Second Number" HorizontalAlignment="Left" Margin="104,168,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.492,2.809" Grid.ColumnSpan="2"/>
        <TextBox x:Name = "result" HorizontalAlignment="Left" Margin="200,293,0,0" Text="Results" TextWrapping="Wrap" VerticalAlignment="Top" Width="200" Height="34" Grid.ColumnSpan="2"/>
    </Grid>
</Window>

在WPF中,XAML使得创建和编辑你的GUI变得容易。它还允许在设计者(XAML)和程序(C#)之间进行分工,不像在WinForms中,设计和程序是不分开的。

在WPF中,我们必须为按钮添加一个点击事件处理程序,而在WinForms中,这不是必需的。

当用户选择添加按钮时,用户在上面两个TextBox控件中提供的值的总和应该显示在第三个TextBox控件中。

在按钮事件处理程序中添加以下代码。

using System.Windows;
namespace addingTwoNumbers
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void add_click(object sender, RoutedEventArgs e)
        {
            int results = Int32.Parse(firstnumber.Text) + Int32.Parse(secondnumber.Text);
            result.Text = results.ToString();
        }
    }
}

After adding two numbers in wpf

与WinForms不同,WPF主要用于创建应用程序的用户界面(UI),并具有许多安全功能。

总结

在本教程中,我们通过在两种情况下创建一个简单的应用程序,了解了WinForms和WPF的主要区别。

以下是WPF相对于Winforms的一些主要优势。

  • 改进的图形用户界面
  • 更好的动画
  • 二维和三维可视化能力
  • 网络应用程序的兼容性
  • 更快的加速能力
  • 跨平台支持

WPF是本地Windows程序最常用的开发平台。因此,你可以用它来创建高质量的应用程序。