你知道WPF与WinForms的区别吗?

介绍

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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303365.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一起谈.NET技术,发布NGuestBook(一个基于.NET平台的分层架构留言本小系统)

发布NGuestBook的动机说明 大约在半年前&#xff0c;我在博客上发表了一个系列文章&#xff1a;《基于.NET平台的分层架构实战》。当时在讲解过程中用到了一个叫NGuestBook的案例&#xff0c;在那以后&#xff0c;有很多朋友留言或发E-mail希望能得到NGuestBook的完整源代…

当Java、C++、Python等编程语言都变成妹子。。。

试想一下&#xff0c;当Java、C、Python、Ruby、PHP、C#、JS等编程语言变成了动漫人物会是怎样的一幅场景呢&#xff1f;下面就一起看看在日本作家渡辺将人的笔下&#xff0c;各种编程语言都是哪类“美女”的吧&#xff01;Java犹如宫泽贤治的《不畏风雨》中出现的、性格木讷的…

对MySQL 进行深入学习是非常必要的

MySQL 在互联网行业非常流行&#xff0c;腾讯&#xff0c;阿里等互联网巨头都在深入使用MySQL&#xff0c; 我在腾讯时也使用MySQL&#xff0c;我在微信群里经常听到大家对MySQL 的意见也很大。在传统企业环境下使用最多的数据库产品是Oracle,SQL Server等企业级数据库&#xf…

4月 .NET 线上 Meetup,快来报名

点击蓝字关注我们.NET 6 preview 2 在3月11日已经发布&#xff0c;.NET 6 将是 .NET Core 3.1 之后的第一个 LTS 版本&#xff0c;也是微软开启全平台统一一个 .NET 计划以来的第一个 LTS 版本&#xff0c;意义不可谓不大&#xff0c;那么 .NET 5/6 又会带来哪些新特性呢&#…

机器学习资料第3版,助你继续成长!

之前分享的两份机器学习资料得到很多人的支持&#xff0c;因此小编决定再分享一份机器学习的资料。前两份资料传送门&#xff1a;【资源】机器学习资料包来袭机器学习资料升级版来了&#xff01;&#xff01;&#xff01;现在&#xff0c;再来看看有什么新资料吧。How to Build…

人工智能、机器学习、深度学习,到底他们哥仨是什么关系?

有三个词&#xff0c;这两年出现的频率越来越高&#xff1a;人工智能&#xff08;AI&#xff09;&#xff0c;机器学习&#xff08;ML&#xff09;&#xff0c;深度学习&#xff08;DL&#xff09;&#xff0c;到底他们哥仨是什么关系&#xff1f;今天小编化繁为简&#xff0c;…

如何在 ASP.NET Core 中使用 HttpClientFactory ?

ASP.Net Core 是一个开源的&#xff0c;跨平台的&#xff0c;轻量级模块化框架&#xff0c;可用它来构建高性能的Web程序&#xff0c;这篇文章我们将会讨论如何在 ASP.Net Core 中使用 HttpClientFactory。为什么要使用 HttpClientFactory 可以用 HttpClientFactory 来集中化管…

如何选择合适的损失函数,请看......

机器学习中的所有算法都依赖于最小化或最大化某一个函数&#xff0c;我们称之为“目标函数”。最小化的这组函数被称为“损失函数”。损失函数是衡量预测模型预测期望结果表现的指标。寻找函数最小值的最常用方法是“梯度下降”。把损失函数想象成起伏的山脉&#xff0c;梯度下…

OxyPlot.SkiaSharp中文显示乱码的问题

oxyplot 图表控件功能强大&#xff0c;使用很广泛。最近考虑到性能使用OxyPlot.SkiaSharp替代OxyPlot.WPF&#xff0c;曲线图表初步测试&#xff0c;性能提升近10倍左右。基于SkiaSharp图形引擎的一些控件常遇见中文乱码的问题&#xff0c;所以改用OxyPlot.SkiaSharp时也有心里…

想入门平均月薪2.58w人工智能领域?看看BAT的工程师在学什么

在这个贩卖焦虑的时代&#xff0c;职场人士和新晋父母成为了重点呵护对象&#xff0c;前有“摩拜同龄人”超越你&#xff0c;后有“月薪 3 万支撑不起的暑假班”等着你&#xff0c;而人工智能&#xff0c;又威胁要彻底抢走你的饭碗。京东无人分拣中心曝光&#xff0c;华尔街顶级…

.NET 6 Preview 3 发布

前言2021/4/8 .NET 6 Preview 3 发布&#xff0c;这个版本的改进大多来自于底层&#xff0c;一起来看看都有什么新特性和改进吧。库改进新增值类型作为字典值时更快的处理方法.NET 6 Preview 3 引入了新的 unsafe API CollectionsMarshal.GetValueRef&#xff0c;这个 API 允许…

数据挖掘在生活上的应用

随着信息科技的进步&#xff0c;数据的收集变得十分便利。各式各样(手机、信用卡、浏览网页及部落格等)的信息&#xff0c;从不同的数据源&#xff0c;涌入我们预先设计好的数据仓储。这些信息透过数据挖掘的技术组合在一起&#xff0c;就可快速地勾勒出每个人对生活的品味、特…

Asp.Net Core 5 REST API 使用 JWT 身份验证 - Step by Step(二)

翻译自 Mohamad Lawand 2021年1月22日的文章 《Asp Net Core 5 Rest API Authentication with JWT Step by Step》 [1]在本文中&#xff0c;我将向您展示如何向我们的 Asp.Net Core REST API 添加 JWT 身份验证。我们将介绍的主题包含注册、登录功能以及如何使用 JWT (Json Web…

掌握这四点核心思想,统计学才算入门

在日常生活中&#xff0c;统计无处不在&#xff0c;比如最常见的问卷调查。实际上&#xff0c;统计学作为一门研究数据收集、整理与分析的学科&#xff0c;是能够帮助我们实现数据运用的终极目标&#xff08;终极目标&#xff1a;洞悉本质、确定规律、预测未来&#xff09;。但…

NET问答: Log4Net 无法将日志写入到 log 文件的求助.....

咨询区 john84&#xff1a;我在一个小项目中用上了 Log4Net&#xff0c;程序跑起来后没有任何日志写入到 log 文件&#xff0c;可能是我的 log appender 配的有问题&#xff0c;尴尬????&#xff0c;大家看看我这样配的有问题吗&#xff1f;web.config 完整的配置如下。<…

centos php.ini redis,CentOS下安装Redis及Redis的PHP扩展

1、安装Redis1.1 如果没有安装wget&#xff0c;安装wgetyum install wgetwget http://download.redis.io/releases/redis-3.2.0.tar.gz1.3 解压&#xff0c;并进入解压目录进行编译。编译成功后会在redis-3.2.0目录下生成相关文件$ tar xzf redis-3.2.0.tar.gz$ cd redis-3.2.0…

荐书 | 从启蒙到进阶,值得推荐的五本少儿编程

据小木对身边的人了解&#xff0c;好像码农们都有这么一个愿望&#xff1a;等我有孩子了&#xff0c;我一定教我的孩子学编程。玩游戏玩自己设计的才酷&#xff01;看着一个个码农爸爸憧憬着美好的愿景&#xff0c;小木恨不得马上帮他们实现这个愿望。这不~在了解了许多本儿童编…

ASP.NET Core 5.0 Web API 自动集成Swashbuckle

ASP.NET Core 5.0 Web API与开放源代码项目 Swashbuckle.AspNetCore 的维护人员合作&#xff0c;ASP.NET Core API 模板包含对 Swashbuckle 的 NuGet 依赖关系。Swashbuckle 是一个常用的开放源代码 NuGet 包&#xff0c;可动态发出 OpenAPI 文档。Swashbuckle 通过 API 控制器…

卷积神经网络「失陷」,CoordConv来填坑

卷积神经网络拥有权重共享、局部连接和平移等变性等非常优秀的属性&#xff0c;使其在多种视觉任务上取得了极大成功。但在涉及坐标建模的任务上&#xff08;如目标检测、图像生成等&#xff09;&#xff0c;其优势反而成为了缺陷&#xff0c;并潜在影响了最终的模型性能。Uber…

WPF 对控件截图

突然需要一个Logo,找又找不到&#xff0c;就自己做喽&#xff0c;首先想到的是ps,简单方便&#xff0c;转念一想&#xff0c;wpf搞这个不是很简单么&#xff1f;直接弄做好&#xff0c;截图一下不就行了。。。开工了&#xff0c;先在iconfont上找了个图标&#xff1a;是这样的然…