来说说winform和wpf异同,WPF对于新人上手容易吗?

news2024/11/20 18:48:19

这么问,可能还真不是很好回答,但WPF的特点决定了,他对于前端人员更容易上手。
首先,我们假定你已经安装了Visual studio 2017以上的版本(如果你的VS打开没有WPF那就说明你没有安装.net桌面开发这项),我们就直接开始新建一个WPF工程来说明上手的相关问题,主要是针对他的特点做一些对比,通过对比我们就知道新人是否容易上说。

文章目录

  • 一、新建第一个WPF项目
    • 1、新建窗体和窗体布局
    • 2、难道大家因为流行xml?
    • 3、控件布局和外观
    • 4、窗体的xaml代码层次
  • 二、事件绑定
  • 三、数据交换
    • 1、“球”不是这样踢的!
    • 2、数据的操作
    • 3、数据绑定
    • 4、还有一种简单绑定法

文章出处: https://blog.csdn.net/haigear/article/details/129338159
如果你以前是做前端的,或者是从来没有接触过winform编程,VC++或者C#winform都没有学习过,估计学习WPF会更容易接受他的设计。本博文主要对比了以下四个方面:

项目结论
UI设计UI布局设计与winform相比灵活,很适合做前端的人来使用实现
事件和winform相比基本没有没有什么差别
控件对于控件对象的操作与winform相对略有不同,需要手动增加控件名称,否则无法操作
数据数据的交换和操作增加了一种在xaml中操作绑定的方式,csharp代码中也是可以操作绑定的

一、新建第一个WPF项目

1、新建窗体和窗体布局

新建项目我想和winform没有什么差别吧,我这里选择的是C#作为编程语言。
在这里插入图片描述
进来之后,我们会发现,没有program,没有main函数(这可能是你不习惯的地方,如果你是新手,做前端的最好,这些东东你根本不在意,也从来没有在你的概念里出现过)
在这里插入图片描述

2、难道大家因为流行xml?

我们会发现,这个主窗体居然是用xml语言编写的,是标记语言,这个对于前端的同学来收再好不过了,至少说这样的呈现方式你是熟悉的,比如我们前面用的html语言,就都是这样来写的。微信小程序里面的每个页面也是xml写的,包括QT的form布局也是用xml来写的,所以我私自认为,wpf是给winform重新定义了一种布局设计方式,追赶潮流吧。下图是QT的ui文件
在这里插入图片描述
微信小程序(当然,不限于微信小程序)
在这里插入图片描述
许多的软件都喜欢用标记语言来实现,所谓的接口统一(实际是个幌子),包括我们前面说过的SVG矢量图都是用xml这种标记语言来实现的。
在这里插入图片描述

3、控件布局和外观

当我们从工具栏中拖放一个按钮到MainWindow上去后,要修改按钮的颜色大小都很方便,不得不说,做UI真的方便了很多很多了。当我们点击Button后就会在周围出现八个锚点,通过拖动他们来改变大小形状。颜色可以直接在颜色编辑器中选择修改,而且是适时看到修改效果的。
当然,这些改变都会很快在xml代码中反映出来。
在这里插入图片描述

<Button Content="Button" HorizontalAlignment="Left" Margin="205,130,0,0" VerticalAlignment="Top" Background="#FF8E5858" Height="37" Width="163"/>

4、窗体的xaml代码层次

我们来看上面窗体的代码(有一个按钮),看看代码的层次:

<Window x:Class="WpfTest1.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:WpfTest1"
   mc:Ignorable="d"
   Title="MainWindow" Height="450" Width="800">
<Grid>
   <Button Content="Button" HorizontalAlignment="Left" Margin="205,200,0,194" Width="143" />
</Grid>
</Window>

很显然,最顶层是window,其次是Grid,然后是控件button。很显然,这样的层次是可以根据自己的需要增加的,所以,布局会比较灵活。更体现了wpf在做UI方面的优势,为前端开发提高效率而实现的一种窗体。
要给按钮加个图片美化一下空格如同设计网页一样容易,xaml中直接增加了一个imageSource:
在这里插入图片描述

二、事件绑定

我们知道,C#中就是通过事件绑定,QT中是消息槽订阅,这里的wpf更像微信wxml中的做法,或者说更像是webform的做法,把事件调用直接写在了标签属性中了。我们来看看一个button的事件是怎么完成的。
在这里插入图片描述
在按钮的属性中找到闪电符号,点击它,出来一个事件列表,第一个就是click事件,就拿他开刀,双击它,立马自动生成了一个事件:
在这里插入图片描述
在这里插入图片描述
既然,到了这里了,我们也不要客气,写点啥吧,要不写一个“俺老孙到此一游”,哈哈哈

 private void Button_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("俺老孙到此一游");
        }

实际上,C#winform中能用的方法和函数,这里也基本都有。当然,不包括控件和窗体的,因为他们的组织方式已经不一样了。

三、数据交换

一个和用户做交互的界面,无非就是界面布局,事件,数据三大件(这里先不说MVC的事情),所以是时候看看数据交换的时候了。

1、“球”不是这样踢的!

不要想着通过控件实例来操作了!这里增加一个文本输入框和一个下拉框试试看,比如我们试图通过文本框的实例名来操作文本框已经没有效果了,代码提示中没有它,而且即使你写出来也是红色波浪线。
在这里插入图片描述

2、数据的操作

很显然,上面的方法行不通是因为,我们操作的对象不存在,我们看一个TextBox标签里面没有名称,这个时候我们要分两步做才能够像winform一样操作了:
第一,给控件添加全局名称x:textBox1

<TextBox  x:Name="textBox1" HorizontalAlignment="Left" Margin="437,210,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" Height="19" Text=""/>

第二,通过控件便签中的对象名称textbox1赋值(这里我们继续在按钮事件中调用)

 private void Button_Click(object sender, RoutedEventArgs e)
        {
            this.textBox1.Text = "Welcome back!";
        }

3、数据绑定

数据绑定是许多借助xml作为页面布局的开发语言常见的功能,自然wpf也不能少。我们看看它是如何绑定的。
第一,新建一个绑定实例对象(并在构造函数中设定数据源)
第二,设定绑定属性

 List<Student> stuList = new List<Student>()
  {
      new Student() { Id = 0, Name = "Tim", Age = 29 },
      new Student() { Id = 1, Name = "Tom", Age = 28 },
      new Student() { Id = 2, Name = "Kyle", Age = 27 },
      new Student() { Id = 3, Name = "Tony", Age = 24 },
      new Student() { Id = 4, Name = "Vina", Age = 23 },
      new Student() { Id = 5, Name = "Mike", Age = 22 },
  };
  //为ListBox设置Binding
  this.listBoxStudents.ItemsSource = stuList;//数据源
  this.listBoxStudents.DisplayMemberPath = "Name";//路径
  //为TextBox设置Binding
  Binding binding = new Binding("SelectedItem.Id") { Source = this.listBoxStudents };
  //将listbox选择的索引值绑定给TextBox1了
  this.textBox1.SetBinding(TextBox.TextProperty, binding);

绑定效果如下:
在这里插入图片描述

4、还有一种简单绑定法

这种方法之所以说简单,就是直接在xaml中搞定了,不需要跑到Csharp代码中来操作,但个人觉得还是统一都在csharp代码来操作会更好一些,前面就只要负责UI的事情,这也是前端开发更熟悉的路数。

<TextBox  Name="textBox1"  Width="120" Height="19" Text="{Binding Path=SelectedIndex,ElementName=listBoxStudents}"/>

这行代码其实就相当于在csharp代码的这行

this.textBox1.SetBinding(TextBox.TextProperty, new Binding("SelectedIndex") { ElementName = "listBoxStudents" });

码字不易,转载请注明出处:https://blog.csdn.net/haigear/article/details/129338159

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

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

相关文章

【2023unity游戏制作-mango的冒险】-前六章API,细节,BUG总结小结

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 收录于专栏&#xff1a;unity游戏制作 ⭐mango的冒险前六章总结⭐ 文章目录⭐mango的冒险前六章总结⭐&#x1f468;‍&a…

Eureka - 总览

文章目录前言架构注册中心 Eureka Server服务提供者 Eureka Client服务消费者 Eureka Client总结资源前言 微服务&#xff08;Microservices&#xff0c;一种软件架构风格&#xff09;核心的组件包括注册中心&#xff0c;随着微服务的发展&#xff0c;出现了很多注册中心的解决…

【项目精选】 塞北村镇旅游网站设计(视频+论文+源码)

点击下载源码 摘要 城市旅游产业的日新月异影响着村镇旅游产业的发展变化。网络、电子科技的迅猛前进同样牵动着旅游产业的快速成长。随着人们消费理念的不断发展变化&#xff0c;越来越多的人开始注意精神文明的追求&#xff0c;而不仅仅只是在意物质消费的提高。塞北村镇旅游…

Android事件分发机制

文章目录Android View事件分发机制&#xff1a;事件分发中的核心方法onTouchListener和onClickListener的优先级事件分发DOWN,MOVE,UP 事件分发CANCEL代码实践requestdisallowIntereptTouchEvent作用Android View事件分发机制&#xff1a; 事件分发中的核心方法 Android中事件…

一文让你彻底理解Linux内核多线程(互斥锁、条件变量、读写锁、自旋锁、信号量)

一、互斥锁&#xff08;同步&#xff09; 在多任务操作系统中&#xff0c;同时运行的多个任务可能都需要使用同一种资源。这个过程有点类似于&#xff0c;公司部门里&#xff0c;我在使用着打印机打印东西的同时&#xff08;还没有打印完&#xff09;&#xff0c;别人刚好也在…

【Tcp和Udp】

udp和tcpTcpTcp协议的断开与连接Tcp的状态转移复位报文段交互数据流与成块数据流流式服务特点应答确认与超时重传滑动窗口拥塞控制Udp协议特点Tcp Tcp协议的断开与连接 Tcp协议提供的是&#xff1a;面向连接&#xff0c;可靠的&#xff0c;字节流服务。 使用Tcp协议通信的双方…

java封装继承多态详解

1.封装 所谓封装&#xff0c;就是将客观事物封装成抽象的类&#xff0c;并且类可以把数据和方法让可信的类或者对象进行操作&#xff0c;对不可信的类或者对象进行隐藏。类就是封装数据和操作这些数据代码的逻辑实体。在一个类的内部&#xff0c;某些属性和方法是私有的&#…

自学大数据第三天~终于轮到hadoop了

前面那几天是在找大数据的门,其实也是在搞一些linux的基本命令,现在终于轮到hadoop了 Hadoop hadoop的安装方式 单机模式: 就如字面意思,在一台机器上运行,存储是采用本地文件系统,没有采用分布式文件系统~就如我们一开始入门的时候都是从本地开始的; 伪分布式模式 存储采用…

openpnp - 判断吸嘴是否指定了正确的旋转轴

文章目录openpnp - 判断吸嘴座是否指定了正确的旋转轴概述笔记吸嘴单独矫正的时候Calibrate precise camera ↔ nozzle N1 offsets.ENDopenpnp - 判断吸嘴座是否指定了正确的旋转轴 概述 如果没有指定吸嘴座的正确旋转轴, 会因为对应吸嘴该旋转时不旋转, 而是另外一个空闲的吸…

Linux学习记录——십삼 程序地址空间

文章目录1、了解程序地址测试代码2、理解程序地址空间3、程序地址空间存在的意义1、了解程序地址测试代码 1 #include <stdio.h>2 #include <assert.h>3 #include <unistd.h>4 5 int g_value 100;6 int main()7 {8 pid_t id fork();9 assert(id &g…

设计模式之结构型模式

1、代理模式1.1 静态代理1.2 jdk 动态代理1.3 CGLIB 动态代理1.4 优缺点2、适配器模式2.1 类适配器模式2.2 对象适配器模式2.3 JDK 源码解析3、装饰者模式3.1 JDK 源码解析3.2 代理模式与装饰者模式的区别4、桥接模式5、外观模式6、组合模式6.1 组合模式的分类6.2 优点及使用场…

ZincSearch Java 客户端教程

ZincSearch Zinc 简单、强大&#xff0c;不了解的同学可以参见我之前的博客。今天我们这里谈谈 Java 环境如何集成 Zinc 客户端&#xff0c;跟如何使用的。 安装 Zinc 到 Github 的官方 Releases 下载&#xff1a; 我的是 Windows 开发环境&#xff0c;下载 zincsearch_0.4…

基于支持向量机SVM的面部表情分类预测

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 SVM应用实例,基于SVM的面部表情分类预测 代码 结果分析 展望 支持向量机SVM的详细原理 SVM的定义 支持向量机(support vector machines, SVM)是一种二分类模型,它的基本…

【网络】-- 网络编程套接字(铺垫、预备)

目录 理解源IP地址和目的IP地址 认识端口号 端口号 理解源端口号和目的端口号 套接字 认识TCP与UDP协议 网络字节序 socket编程接口 socket 常见API sockaddr结构 理解源IP地址和目的IP地址 就如同我们唐僧的取经路&#xff1a; 唐僧的出发地到目的地&#xff1a;东…

阿尔法开发板 .bin 文件烧写

一. IMX6ULL 开发板简介 IMX6ULL 开发板是正点原子提供的阿尔法开发板&#xff0c;所用芯片为恩智浦&#xff0c;基于 Cortex-A7 架构。 这里介绍一下裸机篇中&#xff0c;关于如何将 .bin 文件烧写进 SD 卡&#xff0c;从而设备运行程序。 二. xx.bin 文件烧写 IMX6ULL支…

句子的改写和扩写

目录 1.句子改写 2.句子扩写 &#xff08;不低于15个句子算是长句子&#xff0c;不能太多长句子&#xff09; 1.句子改写 我绝不会嫁给你的。 如果你是世界上最后一个男人&#xff0c;我就去寺庙。 If you married me,I would jump into the well. 如果你嫁给我&#xff0c;我…

【Java学习笔记】5.Java 基本数据类型

Java 基本数据类型 变量就是申请内存来存储值。也就是说&#xff0c;当创建变量的时候&#xff0c;需要在内存中申请空间。 内存管理系统根据变量的类型为变量分配存储空间&#xff0c;分配的空间只能用来储存该类型数据。 因此&#xff0c;通过定义不同类型的变量&#xf…

计算机网络的166个概念你知道几个 第三部分

广播&#xff1a;我们一般小时候经常会广播体操&#xff0c;这就是广播的一个事例&#xff0c;主机和与他连接的所有端系统相连&#xff0c;主机将信号发送给所有的端系统。 多播&#xff1a;多播与广播很类似&#xff0c;也是将消息发送给多个接收主机&#xff0c;不同之处在于…

最近一年我都干了什么——反思!!

过去一年不管是学习方式还是心态上都和以往有了许多不同的地方&#xff0c;比较昏昏沉沉。最近慢慢找到状态了&#xff0c;就想赶紧记录下来。 学习 在学习新技术的过程中开始飘了&#xff0c;总感觉有了一些开发经验后就觉得什么都不用记&#xff0c;知道思路就行遇到了现场百…

15、正则表达式

目录 一、元字符 二、限定修饰符 一、元字符 正则表达式通常被用于判断语句中&#xff0c;用来检查某一字符串是否满足某一格式。正则表达式是含有一些具有特殊意义字符的字符串&#xff0c;这些特殊字符称为正则表达式的元字符。例如&#xff0c;“\\d”表示数字0~9中的任何…