什么是WPF,对WPF的认识-程序员宅基地

技术标签: c#  winform  wpf  

一,什么是WPF

WPF(Windows Presentation Foundation)翻译为中文“Windows呈现基础” 是微软新发布的Vista操作系统的三个核心开发库之一,是微软推出的基于Windows Vista的用户界面框架,属于.NET Framework 3.0的一部分。它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作;同时它提供了全新的多媒体交互用户图形界面。

二,WPF有关知识

首先说一下学习WPF的基础知识:

  1. 要会一门.NET所支持的编程语言。例如C#

  2. 会一点“标准通用标记语言”:WPF窗体程序使用的XAML语言,也属于“标准通用标记语言”的一个分支。如果以前接触过XML、HTML、XHTML、ASP.NET之类的“标准通用标记语言”,对于学习是有所帮助的。

  3. 有一定的WinFormASP.NET经验,主要是对控件事件的处理要有所了解。

  4. 拥有良好的面向对象的思想:在WPF中,经常要灵活运用各种继承关系、多态、重载等。

  5. DataBinding要有所了解:Binding是WPF的一大亮点。

  6. 对设计模式要有一定的了解:当然是越深入越好了,在实际项目中,各种设计模式经常交融使用。

三,WPF的特点

优点:

  1. MVVM模式,数据和视图分离
  2. 类库多,上手快,可以快速开发
  3. 灵活的控件组合,可以修改已经存在的控件的外观
  4. 可以应用不同样式不同的控件,易于管理
  5. 支持动画,高级图形,高级数据绑定,3D等功能
  6. 绚丽的展示效果WPF除了可以使用传统的Windows Installer以及ClickOnce方式来发布我们的桌面应用程序之外,还可以将我们的应用程序稍加改动发布为基于浏览器的应用程序。

缺点:

  1. 对微软系统依赖性太强 到了非微软的操作系统上,很多FrameWord里面的类库就不好使了。
  2. 技术更新速度快
    移动和硬件领域的乏力,c/c++/java在移动领域和硬件领域的开发优势,是不用多说的----你见过几个公司,选择用c#来开发移动系统或者硬件驱动的?

四,WPF和Winfrom的区别

在两者最重要的区别,WinFrom只是标准窗体控件顶部的一层(如文本框),而WPF从零凯斯,几乎在所有场景下都不依赖于标准窗体控件

举一个很好的栗子,现在有一个带图片和文字的按钮。它并不是一个标准窗体控件,WinForms无法提供现成的,你不得不自己画图片,实现支持图像的按钮,或使用第三方控件。相反,在WPF,按钮可以包含任何东西,因为它本质上是一个带内容和不同状态的边框。WPF的按钮就好像是一个看不见的物体,可以放入各种其他控件到里面,不部分WPF控件都是如此。你是想要一个带图片和文字的按钮?很简单,只要把一张图片和一个文本块放到按钮里面就搞定了。在标准WinForms控件之外好像你找不到这种灵巧的方式,这就是为什么像带图片的按钮这种简单的控件实现会有如此大市场的原因。

WPF优势

  1. 比较新,从而更符合目前的标准。
  2. 微软正在使用它开发很多新应用,比如Visual Studio。
  3. 更灵活,你不必再去自己写控件或者买控件。
  4. 你所使用的第三方控件更多的聚焦在WPF上,因为它比较新。
  5. XAML使得GUI的创建和编辑更加容易,而且允许拆分设计器(XAML)和代码器(C#, VB.NET).
  6. 数据绑定,你可以更加彻底的分离数据和布局.
  7. 用硬件加速绘制图形用户界面,性能更好。
  8. 允许你在Windows应用和web应用之间进行用户交互。

WinForms优势

  1. 出现比较久,已经经历很多检验和测试。
  2. 已经有很多第三方控件供你购买或者免费使用。
  3. Visual Studio设计器仍然更适合WinForms,在WPF很多东西你还是需要自己去开发。

五,开发基础

  1. 新建WPF应用程序
    选择菜单->“文件”->“新建”->“项目”,在“新建项目”对话框中选择WPF应用程序,修改名称为WpfDemo,然后点击“确定”按钮,如下图所示:
    在这里插入图片描述
  2. 生成的文档接口图如下:
    在这里插入图片描述
  3. 在App.xaml中的“StartupUri”属性可以指定项目运行时的启动窗体。如下图中“StartupUri=”MainWindow.xaml””,还可以定义我们需要的系统资源以及引入程序集等,如下图所示:
    在这里插入图片描述

六,XAML语言

XAML语言:是微软公司为构建应用程序用户界面而创建的一种新的“可扩展应用程序标记语言”,提供了一种便于扩展和定位的语法来定义和程序逻辑分离的用户界面。

特点:
定义应用程序的界面元素
显示的声明WPF资源(样式、模板、动画等)
可扩展性(自定义UI控件)
集中关注于界面的设计和实现

七,XAML命名空间以及命名空间映射到程序集

1. XAML命名空间

开发语言会将常用功能以类的形式封装,开发人员根据自己的业务需求,也会封装满足自身业务需求的类,如果有序组织这些类?一方面,便于开发人员准确调用;另一方面,编译器可以有效识别具有相同命名的类,就引入了命名空间,简单的说,是通过类似树状结构来组织各种类,是一种较为有效的类名排列方式。

而XAML和.NET其他语言一样,也是通过命名空间有效组织起XAML内部的相关元素类,这里的命名空间与.NET中的命名空间不是一一对应的,而是一对多,一眼望去,都是“网址”,这里的网址,是遵循XAML解析器标准的命名规则,而不是真正的网址(在IE中根本打不开)。
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"对应一些与XAML语法和编译相关的CLR名称空间,例如

< Style x:key=“buttonMouseOver” TargetType="{x:Type Button}">
这里的xmlns和xmlns:x的区别在于x作为别名,在应用时,以前缀形式出现,而xmlns作为默认命名空间,不使用前缀标识的元素,来自该命名空间。

XAML命名空间的语法:

xmlns[:可选映射前缀]=“命名空间描述”
注意:没有加可选映射前缀的xmlns是WPF默认的命名空间,一个xaml文件只能有一个默认的命名空间
一个完整的xaml文件,必须具备两个命名空间。

2、自定义类或程序集映射语法

xmlns[:必选映射前缀]=“clr-namespace:[命名空间];assembly=[程序集名称]”

在同一个解决方案下面新建一个“”的项目,命名为“WPFUserControl”,在项目的属性里面修改默认

的命名空间为:MyControl.WpfUserControl,添加两个TextBlock和两个TextBox,如图所示:
在这里插入图片描述
在第一个项目里面引用新建的用户控件,注意:首先要添加新建用户控件库的引用。
在这里插入图片描述
3、映射到当前程序集的语法
xmlns[:必选映射前缀]=“clr-namespace:[命名空间]”
在当前项目下面新建一个用户控件,添加两个TextBlock和两个TextBox,如下图所示:
在这里插入图片描述
在MainWindow.xaml里面调用新建的用户控件,需要引用命名空间:
在这里插入图片描述

资料来源https://www.jianshu.com/p/4668a237d0fa
资料来源https://blog.csdn.net/seanbei/article/details/52601089

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42251596/article/details/103531037

智能推荐

剑指 Offer 31. 栈的压入、弹出序列【无取巧,易于理解!】-程序员宅基地

文章浏览阅读331次。看题解时,很多大牛用很少的代码就完成了AC,但可能看了很多遍也看不懂,因此萌生了写一种最“笨”最完整的代码的想法,这样大家可以通过我的代码入门,看懂了再去挑战大牛们的简洁解法。输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。示例 1:输入:pushed = _剑指 offer 31. 栈的压入、弹出序列

手把手用虚拟机搭建spark集群_virtualbox spark-程序员宅基地

文章浏览阅读1.1k次。配置spark集群安装虚拟机和ubuntu环境点击此链接下载VirtualBox虚拟机,按照提示正常安装。打开VirtualBox软件,点击管理的全局设定;点击常规,更改默认虚拟电脑位置即把虚拟环境放在哪。具体图示如下:新建虚拟环境,点击新建,输入环境名称,类型和版本,按下图填写即可;点击下一步,内存大小我选取的是1500(本机运行内存为8gb),点击下一步;现在创建虚拟硬盘,点..._virtualbox spark

零基础HTML教程(23)--表单_html 23%-程序员宅基地

文章浏览阅读1.9k次,点赞8次,收藏11次。本文目录1. 前言2. 表单标签3. 表单输入标签3.1 文本框3.2 密码框3.3 单选框3.4 复选框3.5 按钮4. 小结1. 前言之前我们所讲的一些系列各种HTML标签,都是为了给用户展示一些东西。实际上HTML是可以让用户输入信息的,例如登录时输入用户名密码;购买东西时选择型号、颜色;发布博客时输入标题、内容。HTML通过表单及输入标签,来实现用户输入内容的收集。2. 表单标签表单标签,格式为<form>表单内容</form>,中间的表单内容部分就是用来让用户输_html 23%

在Azure Artifacts中创建feed,并利用pipeline在项目中编译和发布_azure devops pipeline artifacts-程序员宅基地

文章浏览阅读517次。Azure Artifacts是Azure DevOps组织中的存储库,您可以在其中管理代码库的依赖项。 Azure Artifacts可以存储您的工件和二进制文件。它提供了一组依赖项的容器,称为feed。有权访问提要的开发人员可以轻松使用或发布软件包。当您使用新功能或错误修复程序更新软件包并运行测试以确保其正常工作时,请提高软件包的版本号。然后提交更改。程序包的管道可以查看提交,并在Azure Artifacts中使用新版本号创建新工件。不用担心,对于那些依赖该版本的应用程序,仍然具有较低版本号的旧软_azure devops pipeline artifacts

Lucene-2.2.0 源代码阅读学习(36)-程序员宅基地

文章浏览阅读67次。关于MultiTermQuery查询。这里研究FuzzyQuery查询。MultiTermQuery是一个抽象类,继承自它的一种有3个,分别为:FuzzyQuery、WildcardQuery、RegexQuery,其中RegexQuery使用了第三方提供的服务,可以使用正则表达式,如果你对正则表达式很熟悉,可以尝试着使用RegexQuery查询。FuzzyQuery查询,即模糊查..._minimumsimilarity设置

Eclipse中将一个android项目当做另外一个android项目的library_android eclipse library中有两个android 5.0.1-程序员宅基地

文章浏览阅读1.1k次。选中将要被当做library的项目,右击选择Properties,选择Android,拉到最下面给Is Library前面的checkbox打上勾,点击Apply,OK然后,右击需要library的项目,同样Properties里面,拉到最后,点击Add,将上一个项目添加进来会发现在该项目Android Dependencies这个library下会多出一个ja_android eclipse library中有两个android 5.0.1

随便推点

音频驱动之UDA1341芯片之L3接口介绍_ud1341-程序员宅基地

文章浏览阅读1.6k次。我们接着上一节的将,我们I2S传输声音的接口是标准的但是控制接口却各有不一样,比如说我们的UDA1341用的接口叫做L3接口,WM8960等可能用的I2C接口或者自己定义了一个三线接口我们先来看看L3接口是怎么传输控制信号的,发出信息啊,控制音量啊实际上就是读写寄存器,转换的就是读写某个地址,把某个数据读出来或者写进去从这个L3接口怎么传输地址信息和数据信息呢,我们来看看UDA1341_ud1341

HTML表格习题练习_html 表单练习图片-程序员宅基地

文章浏览阅读2.1k次,点赞2次,收藏35次。文章目录一、会议日程安排表二、课程表设计一、会议日程安排表<!DOCTYPE html><html><head> <title>表格</title></head><body><h3 align="center">设置单元格跨列、跨行属性</h3><center><table border="1" bordercolor="#3366ff"><capt_html 表单练习图片

POJ 1422 Air Raid (二分图最小路径覆盖)_poj 1422 二分图-程序员宅基地

文章浏览阅读166次。Consider a town where all the streets are one-way and each street leads from one intersection to another. It is also known that starting from an intersection and walking through town’s streets you can..._poj 1422 二分图

pku1734 Floyd_Warshal算法应用 解题报告_算法 有n个景点,有m条路线,每个景点的攻略价值是a-程序员宅基地

文章浏览阅读1k次。一、题目:Sightseeing trip二、题意:给出N个旅游景点与M跳旅游路线,选择一条总路径最短且旅游景点又最多,而且是从头到尾是一条回路。三、解决办法: 此题其实是经典的Floyd_Warshal算法。四、源代码:#include "stdio.h"#include "string.h" const int n = 101;const int _算法 有n个景点,有m条路线,每个景点的攻略价值是a

PAT甲级1045-程序员宅基地

文章浏览阅读125次。PAT甲级1045题目大意:给出总颜色数n(好像没什么用),eva喜欢的颜色数m,还有可供挑选的颜色数l,求出从l个颜色当中取出eva喜欢的颜色序列最大长度是多少(必须按她喜欢的顺序排列)LIS问题,这里尽量不要写find函数查找是不是eva喜欢的颜色,后面两个测试点会超时,用hash数组存放,如果不是eva喜欢的颜色就置为-1,若是则存放该颜色所在位置。然后开辟一个数组踢掉待选颜色中所有eva不喜欢的颜色即可。#include <iostream>#include <vector_pat甲级1045

fedora下安装MPICH3过程_fedora安装mpi-程序员宅基地

文章浏览阅读1.3k次。1.相关网站http://www.mpich.org/downloads/上下载mpich的安装包:mpich-3.0.42.解压到home\xx\MPI下3.安装 在root权限下安装,进入root命令是sucd \home\xx\MPI./configure --prefix=/opt/mpi --disable=f77(安装到/opt下面)(安装_fedora安装mpi

推荐文章

热门文章

相关标签