WPF的几个关键点

C#Winform向WPF过渡入门(二) 总目录:https://www.v2know.com/MainPage/Category/WPF 好的,直接开始说wpf的前台,也是xaml语言的注意点: 1. Window标签里面只允许存在一个Grid标签 即一个窗口只能包含一个元素, 学过Winform的我一开始还以为是Grid是GridView用来导入数据的。 2. 不应当使用坐标来确定Button的位置 这里要说一下,拖入一个Button控件的话,下面的XAML也会跟着自动生成一串标签代码,其中的Margin属性,是以坐标来定义按钮在M 阅读详情
强大的组合能力

WPF的UI元素可以很灵活的相互嵌套,从而可以实现很复杂的效果。比如,一个Button内部,可以嵌入Image,这样实现常见的位图按钮就很简单。

<Button>
    <Image Source="btn.jpg">
</Button>

还可以使用Layout元素,对内部的对象进一步进行排列

<Button>
    <StackPanel>
        <Image .../>
       <TextBlock .../>
   </StackPanel>
</Button>


用户也可以通过Template来定义Button到底应该长啥样(每一个控件都是可以自由定义的)。

虽然Button的模样可以随便定义,但是Button对外的行为却没有发生变化,最重要的就是在点击的时候会产生Click事件!我们可以简单认为,所有 具备了这个行为特征的元素组合就是Button。同样的,常见控件也有自己的行为特征。对外的行为的统一,为外部的使用提供了方便。

为了能够实现灵活组合,就不得不提到WPF的另外两个机制:

Retained-Mode Graphics

我们一直使用的GDI、DirectX等等,都是直接对屏幕进行绘画的(或者是屏幕缓冲区里),即immediate-mode graphics。具体绘制的内容操作系统是不知道的,只知道一个位图点阵。所以,当窗口因为覆盖而需要重绘屏幕的时候,需要应用程序自己来重新绘制画面 --也就是响应WM_PAINT事件。当年发明这种绘制技术,是因为硬件资源的限制,没有那么多内存资源来保存所有应用程序的屏幕。在WPF发明的时候, 内存已经足够多了,可以尝试新的模式了。应用程序在绘制屏幕的时候,不再只是描绘点阵数据,而是一个基本的图形元素,比如方形,圆形等等,再由WPF来把 这些图形元素转换成实际的位图写入图形缓冲区。除非图形元素有变更,否则屏幕的重绘工作全部由WPF自行完成。这样,应用程序就可以解放出来了。以前,要 在基于窗口的WM_PAINT上实现显示特效是多么的困难啊,为了避免闪烁,需要搞双缓冲区等等--现在就很轻松了。

Route Event

在以前基于窗口的模型里,鼠标等在子窗口上产生的事件,父窗口是收不到的,除非子窗口主动转发。这样,多个元素嵌套组合而成的UI,其事件响应就很麻烦。就 像前面的Button控件,如果在其内部子元素上点击鼠标,是否可以产生Click事件呢?是否需要每个子元素进行转发?

在WPF里,每个元素产生的事件,会以冒泡的方式从产生的地方开始一步步升到根节点。因此,它的每一个父元素都有机会对事件进行处理。这样,前面的Button控件,就可以在外围元素上接收事件,而不用担心内部有多少内嵌的元素了。



Property Value Inheritance 和Attached Property

父 元素的属性,可以自动被子元素所继承,这就是Property Value Inheritance,这样就可以大大的简化代码量,而且可以让界面的风格统一。但是,父元素和子元素的类型很多是不一样的,所以子元素要设定的属性在 父元素里不存在怎么办?于是WPF提出了Attached Property,允许任意增加的属性。比如

<StackPanel TextElement.FontSize=”30”>
    <Label />

本来StackPanel是没有FontSize这个属性的,为了传递给Label,所以通过TextElement.FontSize这种方式硬加上去了。


Dependency Property

这 个属性,跟WPF里其它的属性实现方式不一样。因为在WPF里,会存在大量的对象,而每个元素还有大量的属性值。如果每个属性值都对应一个成员变量的话, 那么将会占用大量的内存资源。所以Dependency Property并没有一个成员变量与其对应,其存贮空间在设置属性值时向WPF临时申请的。所以,其实现代码会比较复杂--因为类方法是共享的,所以相 对会比较省内存资源。

我们可以通过以下方式来设置Dependency Property,其优先级别由高至低,高级别的属性值会覆盖低级别的值。

1. Local value
2. Style triggers
3. Template triggers
4. Style setters
5. Theme style triggers
6. Theme style setters
7. Property value inheritance
8. Default value

DataBinding以及Animation也会影响Dependency Property,所以其确切取值需要当时的环境来计算得知。

Dependency Property是WPF里很多特性得以实现的基础。



WPF学习 首先感谢刘铁锰先生的《深入浅出WPF》,学习WPF过程碰上很多新概念,如Data Binding、路由事件,命令、各种模板等。 WPF:编写CS端的UI技术。 怎么去掉WPF窗体靠上多出黑色的长条?在vs界面的菜单栏点击调试-选项,把启用XAML的UI调试工具勾选去掉即可。(我自己觉得偶尔会用用这个) 1 认识WPF 1.1 新建WPF项目 生成 Properties:... 阅读详情

相关推荐

基于WPF开发的几个主流框架的分析

WPF主流框架分析报告摘要 本报告对比分析了三大WPF主流框架:MVVMLight适合中小项目,学习成本低(★★☆☆☆),提供基础MVVM支持;Prism面向企业级应用(★★★☆☆),支持模块化、DI容器等高级特性,适合复杂项目;Caliburn.Micro(★★★☆☆)采用"约定优于配置"理念,可减少样板代码。报告还提及.NET MAUI的跨平台特性。选型建议:新手从MVVMLight入门,大型项目优选Prism,追求简洁约定可考虑Caliburn.Micro,跨平台需求则选择MAUI

ponygame的博客 2257

treeview wpf代码设置选中_WPF的渲染原理原来是这么回事~

对于开发者来说,WPF 中最主要的知识点就是渲染,因为 WPF 是一个界面框架。想用一篇博客就能告诉大家完整的 WPF 渲染原理是不可能的。本文向大家介绍从开发者执行绘图指令到在屏幕显示的过程。本文是从一个全局的角度来看渲染的过程,在本文之后会补充很多博客来告诉大家渲染的细节。从 WPF 画图像到屏幕显示是比较复杂的,本渣也不敢说这就是 WPF 的做法,但是看了很多博客,好像都是这么说的...

weixin_39537977的博客 437

WPF:WPF绘制曲线

简述   WPF开发中经常需要绘制曲线、直方图等。虽然WPF自带了绘制图形等基础功能,但做程序一个很基础的原则就是避免重复造轮子。在GitHub上找到了微软官方的WPF绘制曲线开源库:InteractiveDataDisplay.WPF。我使用的IDE是VS201x,建议使用NuGet安装--引用InteractiveDataDisplay.WPF。如何使用NuGet,请自行百度。以下是我实验的该...

weixin_33700350的博客 4221

WPF类似于WINFORM的Onpaint

似乎不在需要这种重新绘制控件的操作了。其实在WPF中,如果我们需要低级别的自定义绘制同样是可以的,那么我们就需要一个名DrawingContext的类。在WinForm中,要是想自定义一些控件,就需要重写控件的On_Paint属性,例如我写的冰墩墩,就是利用控件的On_Paint属性重新绘制的。1,在我们的代码中,我们不能直接调用OnRender方法,它将被系统异步调用进行布局和绘制(这与Win32不同)。3,我们的绘制不是实时的,事实上我们的绘制将被保存到一个绘制指令集中被图形 系统在某个时候调用。

qq_40098572的博客 697

WPF技术架构:5个关键点,第3个让你想砸键盘!

摘要: WPF技术架构的5个关键点揭示了其核心优势: 技术演进:基于.NET 3.0的矢量图形与XAML声明式开发 核心机制:依赖属性、数据绑定与DirectX渲染的架构优势 自动布局系统:跨语言自适应UI设计(典型痛点案例) 打包体系:ZIP容器与XPS文档支持 样式资源:集中化管理UI元素 对比WinForms,WPF在渲染性能(5ms vs 20ms)、开发效率(提升40%)和维护成本上具有显著优势。常见误区如"复杂度高""性能差"被实测数据推翻,正确使用需遵循

java专栏 684

WPF下,高性能绘图,写WriteableBitmap,多线程,双缓存

这是一个在WPF下的绘图功能代码,能过写位图,实现顶级的绘图性能,多线程架构,项目代码完整,可直接运行。可以修改适用于自定义控件。

基于WPF的开发的知识点

注册WPF事件时,我们需要为传递事件选择一种策略,这个策略指定了事件在元素树中传递的方式。Tunneling:事件首先在根元素激发,然后到达树下的每个元素直到源元素(或者有处理函数处理这个事件终止了传递)。Bubbling:事件首先在源元素激发,然后向上直到根元素(或者有处理函数处理这个事件终止了传递。Direct:事件只在源元素激发。这与普通的.NET事件一样,除了参与事件触发器。在上面的例子中,我们注册的事件策略就是Bubbling。传递事件的处理函数的参数与普通.NET事件一样。

kalvin_y_liu的博客 3624

车载与安防项目实战:如何用RK3588搭配NVP6158C实现4路AHD摄像头BT1120接入与同步预览

本文详细解析了基于RK3588处理器与NVP6158C解码芯片实现4路AHD摄像头BT1120接入与同步预览的技术方案。针对车载环视和安防监控场景,重点探讨了硬件架构设计、BT1120接口配置、多路同步机制及Android HAL适配等核心问题,提供了从底层驱动到上层应用的完整实现路径,为相关领域的工程实践提供可靠参考。

weixin_30571465的博客 486

WM_PAINT介绍 及 OnPaint()函数的作用原理

*  WM_PAINT是窗口每次重绘都会产生的一个消息。     系统为什么不在调用Invalidate时发送WM_PAINT消息呢?又为什么非要等应用消息队列为空时才发送WM_PAINT消息呢?这是因为系统把在窗口中的绘制操作当作一种低优先级的操作,于是尽可能地推后做。不过这样也有利于提高绘制的效率:两个WM_PAINT消息之间通过 InvalidateRect和InvaliateRgn使之失

Mirage520的专栏 1298

倍福Beckhoff运动控制功能块实战解析:从MC_ReadActualPosition到MC_GearInVelo

本文深入解析倍福(Beckhoff)TwinCAT运动控制功能块,从基础的MC_ReadActualPosition、MC_Power等轴状态读取与使能操作,到MC_MoveAbsolute、MC_MoveRelative等单轴定位指令,并重点剖析了用于动态速度同步的核心功能块MC_GearInVelo在飞锯等场景的应用。文章结合实战经验,详细介绍了齿轮耦合、电子凸轮(MC_CamIn)等高级同步功能的参数配置、调试技巧及常见问题,旨在帮助工程师快速掌握倍福运动控制工具箱,实现复杂的同步工艺。

transformer2023的博客 982

从Delphi 7到Delphi 10.4.1的代码迁移:关键挑战与实用解决方案

本文详细探讨了从Delphi 7升级到Delphi 10.4.1进行代码迁移的关键挑战与实用解决方案。核心内容包括应对Unicode字符串处理、64位数据类型变化、VCL/FMX界面框架选择、第三方组件迁移以及数据库层现代化改造(如从BDE迁移至FireDAC)。文章为开发者提供了系统的迁移前准备、核心问题攻克策略及测试落地指南,旨在帮助团队高效、平稳地完成系统现代化升级。

weixin_29250403的博客 533

WPF MVVM Caliburn.Micro框架入门到精通

     本课程中所涉及的相关知识是由本人在近8年WPF使用经历的一些总结,可快速引导新手快速学习、理解与应用MVVM框架(Caliburn.Micro),Caliburn.Micro用于创建各类型的XAML平台应用的精简而又强大的框架。本课程由浅入深一步一步引导大家使用Caliburn.Micro在项目中的使用。课程内容主要包括框架介绍、数据绑定、事件使用、IOC容器管理、GDI绘图、样式、模板、自定义控件、附加属性、装饰器、多语言切换、进程只例运行、项目实战。

【rk3566/3568】Android 11移植gms

【rk3566/3568】Android 11移植gms 1、前言 测试功能时,想去Google play store去下个应用测试,发现通过网页搜索总是下载不到正确的谷歌服务框架;于是就不得不去搞一个内置的gms。 2、移植 1、需要下载Android 11对应的gms的包 opengapps 2、看下文件目录 直接移植core里面的文件,GAPPs Optional按需添加 3、在vendor下创建google目录 ...

lin_ff的博客 7648

WPF - 几个关键点

第一点,关于binding的。binding功能非常强大,也是wpf的基础之一;数据都靠它。 binding使用上的问题,可以看这个帖子 http://blog.youkuaiyun.com/fishhg/article/details/6244986 要想binding之后,数据可以同步更新,那么data source必须要么实现了INotifyPropertyChanged接口,要么是Depe

程序 = 实践 + 思考 (Programming = Practice + Thinking) 619

QTest 单元测试框架及单元测试思考

qt 单元测试框架 QTEST 及思考

一个老菜鸟的学习分享 1万+

【GameFramework扩展应用】6-5、GameFramework框架出包时增加版本信息Version.txt文件

框架在热更新的时候,会先去获取文件,然后获取版本号,对比版本号和资源大小,才会开始下载资源。但是,框架生成AssetBundle资源的包里面是没有这个文件的,只能我们新建一个文件,然后手动填入数据,非常麻烦。好消息是,框架把这些接口都留给我们了,我们只需要继承接口,重写函数,然后在打包的时候选择这个辅助器即可。下面就来看一下如何实现把。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 1041

WPF实现无线扫码枪无焦点自动获取数据并逻辑处理

USB接口的扫码枪基本就相当于一个电脑外设,在WINDOWS系统中,甚至可以简单到不做任何处理,就能在焦点位置获取扫码枪返回的数据。但是作为一个程序员,总是会遇到客户各种神奇的需求,比如一个比较常见的功能:客户手拿扫码枪不管扫什么,软件都能自动辨别是什么类型的条码,叭叭叭扫好几种条码的时候,软件能够区分出来各种条码,并且根据条码调出相关数据。 呐,这个需求的话,就直接把手动更改焦点位置来扫码的可...

luoqiang_sky的博客 8396

【AutoSAR】【以太网】TCP/IP 栈详述与配置

目录 一、TCP/IP栈架构 二、TCP\IP栈的可扩展性 三、以太网协议V4 四、以太网协议 V6 五、基于IP的协议 六、函数调用序列图 一、TCP/IP栈架构 根据以上架构图,该栈主要包括:UPD\TCP\DHCP\ICMP\IPV4\IPV6\ARP; 二、TCP\IP栈的可扩展性 TCP\IP栈为适应不同的应用场景需求,将分为三类: 配置工程里的配置项: 三、以太网协议V4 1 IPV4 Internet Protocol (IP)是T.

专注汽车软件开发、AutoSAR、车载以太网、SOA、EE架构。 5696

WPF那些事儿

概述 感觉学习的东西必须做个记录,不然很快就忘掉了。现在把WPF学习过程中一些零碎的东西记录在下面,没有具体的主题,想到啥、看到啥都写在这里,算是复习一下并做个备忘吧。 1. 等待对话框 看到同事做的项目中需要一个等待对话框大致如下: 同事用定时器实现了这个效果,实际在WPF中,这个效果可以很容易通过动画实现。 <Grid> <TextBlock x:...

weixin_34392843的博客 115

2025.06.06【Ribo-seq】|riboWaltz:P-site定位与三碱基周期性分析流程

同学们,大家好!今天我们要学习的是riboWaltz——一款专为Ribo-seq(核糖体足迹测序)数据设计的R包,主要用于P-site定位优化和三碱基周期性分析。P-site的准确定位是Ribo-seq下游所有翻译组学分析的基础,riboWaltz为我们提供了系统、可视化、易用的解决方案。P-site定位优化:自动识别不同长度RPF的最佳P-site偏移量。三碱基周期性分析:可视化RPF在CDS、UTR等区域的分布,评估数据质量。多样本/多条件支持:可同时处理多个样本,便于批量分析和对比。

1796

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

什么是WPF,对WPF的认识

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

qq_42251596的博客 5万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

WPF:基于Dlib的人脸关键点检测演示示例

MainWindow.xaml &lt;Window x:Class="Splash.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" ...

秦建辉的专栏 1915

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

WPF几个 手势执行顺序

WPF其实本身对触摸事件就支持. 其中有些高及触屏的操作的手势路由事件. 大大增强了用户体验性. 使得我们能做出类似iphone手机的的触控效果.并使之这些柔和的效果 移植到桌面触摸应用上. 首先我们介绍几个 手势 他们分别是 ManipulationStarting、ManipulationStarted、ManipulationDelta、ManipulationInertiaStarti

etwdone的专栏 4609

wpf中子窗口的几个问题

今天研究了一下wpf中的窗口,写这篇文章来总结一下今天的收获。(转载请注明出处~)总所周知,窗口是windows系统中十分重要的一个元素(从名字上就能体现出来),而一个应用程序总是包含很多窗口(主窗口、子窗口、对话框)。我们要利用wpf实现一个多窗口的应用。新建一个wpf项目后,修改xaml如下:<Window x:Class="WpfApplication3.MainWindow"

新月的力量 3889

WPF重要的几个概念:

WPF重要的几个概念: Binding :用来绑定数据的,非常强大 Command:用来实现命令,比如键盘和按钮都能实现某个功能, Template:模板,有数据模板也有控件模板 上述几个功能一般都是界面和代码进行配合的,比如界面对某个控件的某个属性设置了Binding,而数据源往往来自于代码,因为界面定义时不一定知道数据库里的数据,这些数据要实时更新。 总之,WPF的这些新功能都是为了

etwdone的专栏 1277
上一篇: XAML的几个关键概念
下一篇: 软件开发需要常识
optman
博客等级 码龄26年 64粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值