你知道WPF与WinForms的区别吗?

一线码农聊技术 4天前

以下文章来源于Dotnet9 ,作者沙漠尽头的狼

Dotnet9Dotnet9,专注ASP.NET Core Web API开发、Xamarin.Forms跨平台移动应用开发、WPF/Winform客户端开发、Qt跨平台客户端开发,同时以dotnet9.com网站分享一些技术类文章,欢迎交流、学习。

介绍

WPF的缩写指微软的Windows Presentation Foundation,而WinForms是Windows Forms Applications的简单组合。这两个都是微软的Windows应用程序图形用户界面,开发人员可以使用它们来开发Windows桌面应用程序。本文重点介绍两种开发Windows桌面应用程序的方法之间的主要区别,这些方法可以在现代系统开发中发挥更好的作用。

Windows Forms

WinForms于2002年2月作为.Net Framework的一部分引入。在很大程度上,WinForms允许开发人员在Windows窗体上拖放控件,并允许开发人员使用可以具有C#,VB.NET或任何其他.NET语言的代码隐藏文件来操纵这些控件。每个WinForms控件都是一个类的实例,因为WinForms作为具有一组C++类的包装器存在。Microsoft的Visual Studio使WinForms的开发更容易,因为开发人员可以轻松地从工具箱中拖放控件。

WinForms工具箱中的控件

在WinForms桌面应用程序中,开发人员只能访问他们可以在其中操纵控件事件的代码隐藏文件。WinForms桌面应用程序在控件的功能和应用程序行为方面有其局限性,这将在下一部分中揭示。

WPF桌面应用程序

与WinForms不同,WPF的体系结构包含三个主要组件:a presentation framework, presentation core, and mallcore。WPF并不完全依赖于标准Windows控件,因此是一种独立方式。2007年,Microsoft引入了Windows Presentation Foundation(WPF),以交替WinForms来进行.Net Framework桌面应用程序开发。这一交替带来了桌面应用程序开发中的许多变化。首先,WPF将设计人员和程序员分开,可以使用Visual Studio或Blend分别设计UI,而开发人员可以使用代码隐藏文件来操纵控件事件。

WPF使用XAML创建控件,其文件结构更像ASP.NET,您可以自由使用设计器或编写XAML代码来创建控件。使用Canvas Panel的设计师仍然可以像在WinForms中一样在Windows页面上拖放控件。WPF带来的主要区别是XAML文件和对XAML文件附带的可见设计器的访问。

WPF可视化设计和XAML文件编辑

上图显示了WPF应用程序的布局,其中在Designer旁边显示了XAML文件。

WPF项目的文件结构如下:

WPF项目的文件结构
  • 每个窗口或页面都有一个用于添加控件的.xaml文件以及一个.cs,.vb等文件,后者是代码隐藏文件,更像是ASP.NET方式。
  • 与WinForms不同,WPF生成一个初始MainWindow来启动应用程序,并且要更改启动窗口,可以在App.xaml文件中执行此操作。
WPF主窗体启动配置
  • 该文件充当应用程序的条目。

WPF与WinForms的其他显著区别是控件。要添加控件,您只需要编写简单的XAML代码。例如,要在WPF窗口中添加文本框,你可以写如下代码实现:

<Window x:Class="WpfApp1.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:WpfApp1"     mc:Ignorable="d"     Title="MainWindow" Height="450" Width="800">      <StackPanel>          <TextBox></TextBox>      </StackPanel>  </Window>

请注意语法中的标记,该标记建议使用名称“扩展应用程序标记语言(XAML)”。XAML代码放置在Window标记中。控件标签可能具有描述控件宽度,高度等的属性,具体取决于控件。

WPF还带来了与WinForms的另一个显著区别,那就是可以添加带有图像的Button的功能。在WinForms中,向按钮添加图像意味着必须自己绘制图像或包含一些第三方控件,但是WPF按钮控件很简单,您可以向其中添加任何内容。

<Window x:Class="WpfApp1.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:WpfApp1"     mc:Ignorable="d"     Title="MainWindow" Height="500" Width="800">      <Button Padding="5">          <StackPanel Orientation="Horizontal">              <Image Source="/Image.jpg" Height="25" Width="50" />              <TextBlock Margin="5,0">I'm a Button</TextBlock>          </StackPanel>      </Button>  </Window>

输出如下所示:

WPF运行演示

WPF还提供了完全受支持的数据绑定功能,如下面的示例所示:

<Window x:Class="WpfApp1.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:WpfApp1"     mc:Ignorable="d"          Title="MainWindow" Height="500" Width="800">      <StackPanel Margin="10">          <WrapPanel Margin="0,10">              <Label Content="Your Text Here:" FontWeight="Bold"/>              <TextBox Name="txtBind" Height="20" Width="250"  RenderTransformOrigin="-2.75,0.587" Margin="59,0,336,0"/>          </WrapPanel>          <WrapPanel Margin="0,10">              <TextBlock Text="Bound-Text: " FontWeight="Bold" />              <TextBlock Text="{Binding Path=Text, ElementName=txtBind}" />          </WrapPanel>      </StackPanel>  </Window>

输出

WPF数据绑定演示

上例中的{Binding}属性用于将<TextBlock>中的文本绑定到txtBindTextBox中的文本。这只是说明使用{Binding}属性在WPF中绑定数据有多么简单。

结论

本文通过两种创建桌面应用程序的.NET方式之间的体系结构,语法,文件结构以及应用程序行为差异,展示了WinForms和WPF之间的主要差异。尽管WinForms设计看似友好和直接,但是XAML带来了开发人员在现代桌面应用程序中可能需要的一些有用功能。

原文链接:https://www.c-sharpcorner.com/article/wpf-vs-winforms/

(0)

相关推荐

  • wpf开源控件MahApps.Metro

    wpf开源控件MahApps.Metro 安装 您可以通过NuGet GUI(右键单击您的项目,单击Manage NuGet Packages,选择Online并搜索MahApps.Metro)或使用 ...

  • WPF快速入门系列(6)——WPF资源和样式

    一.引言 WPF资源系统可以用来保存一些公有对象和样式,从而实现重用这些对象和样式的作用.而WPF样式是重用元素的格式的重要手段,可以理解样式就如CSS一样,尽管我们可以在每个控件中定义格式,但是如果 ...

  • .NET 5 重大变更

    .NET 5 重大变更系列的最后一个主题是 WPF 和 Windows Forms.这些桌面技术在.NET Core 3.0 之前是不可用的,因为.NET Core 的早期版本主要专注于基于 Web ...

  • 儒、释、道三家文化的七大区别

    闲云谷 峰下闲云云上松,珍兰奇蕙伴节丛:不忍移爱进瓦罐,卷书抱坛迁谷中. 994篇原创内容 公众号 一.文化主旨 儒家文化--积极进取的文化 儒家倡导知识的获取和品德的培养,是一种积极向上的文化. 道 ...

  • 招摇撞骗罪和诈骗罪有什么区别

    招摇撞骗罪和诈骗罪都表现为欺骗行为,招摇撞骗罪也可以像诈骗罪一样骗取财物,两者容易混淆,大家知道招摇撞骗罪和诈骗罪有什么区别吗? 律师解答: 招摇撞骗罪侵犯的客体主要是国家机关的威信及其正常活动,而诈 ...

  • 香港服务器托管和租用有什么区别?

    香港服务器托管和租用有什么区别?托管和租用都是服务器选择使用方式,想要知道香港服务器托管和租用两种方式有什么区别以及哪种方式比较好,就需要深入了解它们,下面我们就聊聊香港服务器托管和租用的区别. 什么 ...

  • “全款”和“贷款”买房有什么区别?内行:10年后,差距一目了然

    因为现在国内的房价总体上呈现出不断上涨的趋势,尤其是在一二线城市靠近市中心的房子更是高到令现在的不少家庭都有着很大的生活重担,对于现在的年轻人来说也很难能够在他们的承受范围之内. 所以,如果高房价持续 ...

  • “普通人vs 女网红的区别...” 哈哈哈哈哈哈哈哈哈过于真实!

    网上冲浪久了 不得不感叹 现在的女网红真的很努力 为了拍出 前凸后翘的照片 不管何时何地 都执着地凹着浮夸的摆拍造型 网友甚至总结出了当网红的精髓 普通人vs 女网红的区别 学废了 离网红就差一个骨盆 ...

  • 木耳秋耳只差一个字,区别大不同!牢记2点,轻松分辨,不被忽悠

    买木耳有技巧,遇见这4种,不管多少钱也不要买,难吃又费钱 各位读者朋友们大家好,感谢阅读我分享的美食文章,经验和大家一起共享,今天我要和大家分享的内容是:『木耳秋耳只差一个字,区别大不同!牢记2点,轻 ...

  • 药品甲类和乙类的区别

    对于药品,我们都很熟悉.不管怎么样,都有用过各类药物.其实,药品的种类多种多样.世界上有多少种疾病,相对应就会有多少种药物.有句话不是说对症下药,说的就是药物和疾病的关系.由于对人的重要性,因此由不得 ...

  • 山葵中国什么地方有种?山葵和芥末的区别

    芥末有多种,一种是绿色芥末在日本很是常见名为山葵,而中国多以淡黄色芥末多见主要是辣根做的.那么,山葵中国什么地方有种?山葵和芥末的区别是什么? 山葵中国什么地方有种 山葵:中文学名山萮菜,拉丁学名Eu ...