wpf笔记
wpf 手册2篇

wpf 手册2篇WPF手册第一篇WPF(Windows Presentation Foundation)是一种用于创建可视化Windows应用程序的框架。
它提供了一种基于XML的声明性编程模型,通过使用XAML(eXtensible Application Markup Language)定义用户界面的结构和外观。
WPF还提供了丰富的图形、动画和数据绑定功能,使开发人员能够轻松创建出色的用户体验。
在WPF手册的第一篇中,我们将介绍WPF的基本概念和工作原理。
首先,让我们来了解一下WPF的优势。
1. 强大的图形支持:WPF提供了先进的图形渲染功能,包括硬件加速和3D图形支持。
开发人员可以通过WPF创建出色的视觉效果,并实现高度可定制的用户界面。
2. 声明性编程模型:WPF使用XAML来定义用户界面的结构和外观,使开发人员能够以声明式的方式描述应用程序的界面和行为。
这种分离界面和业务逻辑的方式使代码更易于维护和扩展。
3. 数据绑定:WPF提供了强大的数据绑定功能,可以将数据与界面元素进行动态绑定。
这使得开发人员能够在没有显式的编程代码的情况下实现数据的显示和更新,提高了应用程序的灵活性和可扩展性。
4. 动画和转换效果:WPF支持丰富的动画和转换效果,可以通过简单的方式实现复杂的动态效果。
这些效果可以提高用户界面的交互性和吸引力,提供更好的用户体验。
了解了WPF的优势,接下来让我们深入了解WPF的工作原理。
WPF的核心概念是UIElement和FrameworkElement。
1. UIElement:UIElement是WPF中所有可视元素的基类,包括控件、窗口、面板等。
它提供了一系列方法和属性来管理元素的布局、渲染和事件处理。
2. FrameworkElement:FrameworkElement是UIElement的子类,它提供了更高级别的布局和渲染功能,以便更好地支持复杂的用户界面。
它包括一些重要的属性,如Width、Height、Margin等,用于控制元素的大小和位置。
WPF NotifyIcon 学习笔记

WPF NotifyIcon 学习笔记更新时间:2014/8/12最新版本:1.0.51.简介WPF NotifyIcon是一个实现托盘程序((system tray icon))的WPF控件,是一个纯粹的WPF 控件,不依赖于WinForm NotifyIcon控件。
实现了如下功能:∙Rich ToolTips rather than text∙WPF context menus and popups∙Command support and routed events∙Flexible data binding∙Rich balloon messages rather than the default messages provides by the OS2.相关链接/Articles/36468/WPF-NotifyIcon//wpf-notifyicon3.下载地址(控件及示例程序)/uploads/projects/notifyicon/wpf-notifyicon.zip/KB/WPF/wpf_notifyicon/wpf-notifyicon.ziphttps:///packages/Hardcodet.NotifyIcon.Wpf/4.通过NuGet安装在Visual Studio IDE中,依次选择“工具\NuGet程序包管理器\程序包管理器控制台”,在“程序包管理器控制台”中执行下面命令PM> Install-Package Hardcodet.NotifyIcon.Wpf 5.NotifyIcon控件实现简介包括两个部分:Interop namespace中的类:这些类中的代码通过Win32 API 中的Shell_NotifyIcon函数配置NotifyIcon。
这些类用于NotifyIcon内部;项目文件夹下的类:这些类提供WPF API。
TaskbarIcon类代表了NotifyIcon。
关于wpf中popup中的一些用法的总结

在WPF(Windows Presentation Foundation)中,Popup控件是一个用于显示弹出窗口的控件。
Popup 控件本身是一个不可见的元素,只有在向Popup中添加内容(如文本框、按钮等)后,它才可见。
Popup 控件在UI中的使用非常灵活,可以用来实现各种自定义的弹出效果。
以下是关于WPF中Popup控件的一些常用属性和用法的总结:1.IsOpen属性:这是一个布尔值,用于指示Popup控件是否显示。
当设置为true时,Popup控件将显示;当设置为false时,Popup控件将隐藏。
2.StaysOpen属性:这也是一个布尔值,用于指示在Popup控件失去焦点时是否关闭Popup控件的显示。
如果设置为true,Popup控件将保持打开状态,即使它失去了焦点;如果设置为false,Popup 控件在失去焦点时将自动关闭。
3.PopupAnimation属性:这个属性用于设置Popup控件显示时的动画效果。
它只有在AllowsTransparency属性设置为true时才有用。
例如,可以设置为"Fade"表示Popup控件以渐入的方式显示。
4.PlacementTarget属性:这个属性用于设置Popup控件停靠的位置。
它通常绑定到一个控件上,表示Popup控件将相对于该控件进行定位。
例如,可以设置为一个CheckBox控件,这样Popup控件就会出现在该CheckBox控件的旁边。
5.Placement属性:这个属性用于指定Popup控件的定位方式。
它是一个枚举值,可以选择不同的定位方式,如RelativeTo、Absolute、Bottom、Top等。
6.PlacementRectangle属性:这个属性用于设置一个矩形,Popup控件在显示时将相对于此矩形进行定位。
这个矩形的位置也相对于PlacementTarget属性所设定的控件。
7.HorizontalOffset和VerticalOffset属性:这两个属性用于指定Popup控件在水平方向和垂直方向上的偏移量。
AvalonDock学习笔记_修订版

AvalonDock 2.0 学习笔记1.入门AvalonDock 是一个WPF控件库,用于创建可停靠式布局系统。
1.1.AvalonDock2.0版新增的功能●修复1.x中的绑定问题:修复1.x中弹出式面板和浮动窗口相关绑定不能工作的问题。
●内置支持MVVM:可以创建你的Model并使用DockingManager 作为View。
●弹出式窗口性能改善:●弹出式窗口支持 'Aero Snap':●弹出式窗口集成停靠功能:可以让用户在浮动窗口中重新停靠可停靠内容●布局序列化:布局序列化/反序列化更容易,易于集成框架如PRISM/MEF●使用WPF标准控件。
●正在缓解/解决“焦点/激活”问题,尚未完全解决;●WPF Logical/Visual tree 管理:有且只有一个logical tree,logical tree的root是DockingManage,甚至一个控件放在不同的窗口(自动隐藏或浮动)。
1.2.版本历史●12 2013 Update 2.0.2000 released. Download here●May 21 2013 AvalonDock is now part of Extended WPF Toolkit2.AvalonDock 组件简介以下图为例,说明AvalonDock各控件:DockingManager:核心控件,安排包含的面板,处理弹出式面板和浮动窗口,处理布局的保存和恢复。
在上图中,DockingManager包含所有对象(WPF术语)。
LayoutPanel:按照Orientation属性指定的方向排列子面板,并在它们之间添加一个大小调节控件。
LayoutAnchorablePane:包含一个LayoutAnchorable对象集合。
通常它象tabcontrol一样排列内容。
LayoutAnchorablePane可以自动隐藏,可以拖出DockingManager成为一个浮动窗口或者锚定到父控件DockingManager的一个边上。
WPF基础知识

WPF基础知识在过去的一年多时间中,微软公司一直在大力推广Vista操作系统。
作为开发人员而言,自然会想到开发适应于Vista的下一代Windows应用程序。
这注定要用到本系列文章所关注的WPF(Windows Presentation Foundation)。
本文作为首篇文章,重点向读者介绍WPF的基本概念,内容包括WPF的出处和形成原因,WPF基本概念和功能,以及对于初学者的学习建议等。
希望通过这些内容,能够使读者建立对WPF的初步了解,从而为阅读后续有关WPF技术的文章奠定理论基础。
1. 出处和形成原因2006年底,微软公司发布.NET Framework 3.0。
作为微软精心打造的新一代.NET架构,.NET Framework 3.0默认内置于Vista操作系统中,并担当最主要的应用程序接口。
由此可见.NET Framework 3.0与Vista的关系是何等的紧密。
.NET Framework 3.0以2.0版本为基础,同时增加四个重要组件:Windows Presentation Foundation(WPF),Windows Workflow Foundation(WWF)、Windows Communication Foundation(WCF)和Windows CardSpace(WCS)。
这些组件是.NET Framework 3.0最具价值的部分。
如图1显示了.NET Framework 3.0的组成:如图1所示,如果分别使用一句话说明.NET Framework 3.0的各个组成部分,那么可以这样来描述:.NET Framework 2.0是Windows应用程序的通用基础。
Windows Workflow Foundation用于支持基于工作流的应用程序。
Windows Communication Foundation用于支持面向服务的应用程序。
Windows CardSpace提供一致的数字标识用户控件。
2024年WPF入门教程详解适合新手上路

提供一系列命令或选项,用 允许用户通过拖动滑块来选
户通过点击进行选择。
择一个范围内的值。
自定义控件开发流程示例
01
02
03
04
05
设计控件外观和功 创建自定义控件类 实现控件逻辑 能
定义控件样式和模 在应用程序中使用
板
自定义…
确定控件将要呈现的外观以 及提供的功能。
继承自现有控件或基类,添 加自定义属性和方法。
实现多语言界面。
资源文件访问
使用`ResourceManager`类可以方便 地访问和管理嵌入在应用程序中的资 源文件。
本地化工具
使用Visual Studio的本地化工具可以 方便地创建、编辑和管理多语言资源 文件。
配置文件读写和设置保存策略
配置文件类型 配置文件读写 设置保存策略 加密和解密
WPF支持多种配置文件类型,如XML文件、INI文件、注册表等, 可以根据需要选择合适的类型。
WPF动画系统概述
1 2
动画类型 WPF提供了多种动画类型,包括线性动画、关键 帧动画和路径动画等,可以满足不同的动画需求。
故事板
故事板是WPF动画的核心概念,它用于组织和控 制动画的播放,可以实现复杂的动画效果。
3
依赖属性 WPF动画通过改变元素的依赖属性值来实现动画 效果,这使得动画的应用非常灵活。
04 数据绑定与 MVVM模式实践
数据绑定原理及实现方式探讨
数据绑定定义
数据绑定是一种将UI元素与数据 源相关联的技术,当数据源发生 变化时,UI元素会自动更新以反
映新的数据。
实现方式
WPF中数据绑定可以通过XAML或 代码后置方式实现,绑定目标可以 是控件的属性、集合或方法等。
2024年度WPF入门教程系列
2024/2/2
布局控件可以嵌套使用,以实现更复杂的布局效果。
10
事件处理机制
2024/2/2
01
WPF中的事件处理机制允许用户响应界面上的各种操作,如单 击、输入文本等。
02
事件可以通过XAML或后台代码进行绑定。
事件处理程序是后台代码中的方法,当事件发生时,WPF会自
03
动调用这些方法。
11
数据绑定原理及应用
WPF支持硬件加速渲染,能够充 分利用现代图形硬件的性能,提 供流畅、丰富的用户体验。
2024/2/2
WPF提供了统一的编程模型、语 言和框架,使得开发人员能够更 加高效地创建出具有丰富图形化 界面的应用程序。
WPF还具备强大的数据绑定和样 式化功能,能够简化界面与数据 之间的交互,提高开发效率。
4
模板(Template)是WPF中另一个强大的工具,用于定义控件的结构和外观。 通过修改模板,可以彻底改变控件的默认样式,实现高度自定义的界面效果。此 外,模板还支持扩展,可以在现有模板的基础上添加新的功能和效果。
ቤተ መጻሕፍቲ ባይዱ14
控件自定义方法分享
用户控件创建
用户控件(UserControl)是WPF中一种常用的自定义控件方式。通过组合现有控件并添加自定义逻辑,可以快 速创建出符合特定需求的用户控件。用户控件可以封装复杂的界面和功能,提高代码复用性和开发效率。
自定义控件开发
除了用户控件外,WPF还支持从零开始开发自定义控件。通过继承现有控件或实现自定义的控件基类,可以创建 出具有全新外观和行为的控件。自定义控件需要深入了解WPF的渲染机制、事件处理和数据绑定等底层原理。
2024/2/2
15
动画效果实现途径
工作总结:WPF技术讲解(大纲)
⼯作总结:WPF技术讲解(⼤纲)
⼀、WPF的历史
⾸先给⼤家讲述⼀下Winform的发展⾥程来展⽰WPF的历史,告诉⼤家WPF是在什么背景下诞⽣的。
⼆、WPF的特性
与MFC、Windows相⽐,WPF具有3D呈现特性,XMAL是其核⼼,通过编写XAML代码可以实现各种前端呈现。
WPF/E:实现Web与Winform的结合,即⽤户可以通过WPF来实现Web浏览器页⾯的开发,即B/S。
三、WPF的开发流程
给⼤家讲解⼀下WPF的基本语法,⼀段WPF代码构成的基本要素以及⼀些常⽤元素和注意事项。
随后通过⼀个简单的实例代码演⽰来让⼤家进⼀步了解⼀个简单的WPF项⽬是如何实现的。
四、WPF的前景
WPF是微软的新⼀代Windows界⾯呈现技术,现在⽤的Win7等都是⽤的WPF开发;
WPF/E即将问世,可以⽤它来实现浏览器界⾯,也就是说以后⽤户的Windows窗体可以在任何操作系统上浏览,改变了Winform的操作系统不兼容问题!。
WPF学习笔记-用ExpressionDesign制作矢量图然后导出为XAML
WPF学习笔记-⽤ExpressionDesign制作⽮量图然后导出为XAML 第⼀次⽤Windows live writer写东西,感觉不错,哈哈~~1.在⽩纸上完全凭感觉,想象来画图难度很⼤,尤其是象我这样毫⽆美术基础,毫⽆艺术细胞的⼈⽽⾔。
因此可以找个参照物,⽐如⼀张数码照⽚,对着这个图⽚描,可以⼤体上把物体的轮廓描出来。
2.Ctrl+C然后Ctrl+V,在Expression Design中添加⼀张位图,注意,此时Design会⾃动新建⼀个图层(layer),双击修改图层名为MousePhoto:3.单击Layer⾯板右下⾓的New layer按钮,添加新图层MousePath,并将这个新图层移到MousePhoto层的下⾯:4.单击MousePhoto层的锁按钮,锁定此层,防⽌图⽚移动。
5.在⼯具条中选择B-Spline⼯具:6.开始描⿏标图⽚的外轮廓,沿着外轮廓放置⼏个锚固点。
如果要作⼀条闭合曲线,可以将⿏标指针指向起始点,此时曲线会⾃动闭合,然后单击即可:7.上⾯的⼏个点只是粗略的定位,现在可以精确的调整每个点位置,或添加/删除锚固点。
在⼯具箱中选择Direct Select⼯具,调整各个锚固点的位置,使闭合缺陷尽量与⿏标图⽚的外轮廓重合:经验:平滑的曲线可以近似的看做⼀系列相切的圆弧连接⽽成。
因此这些锚固点最好是放置在每段圆弧的切点和中间点处。
8.再次选择B-Spline⼯具,画⿏标滑轮处的缝隙。
这⼏条缝隙中间有尖⾓,可以在添加尖⾓处锚固点之前按下alt键的⽅法来画尖⾓:外轮廓加⼀条缝隙完成后的样⼦:9.重复以上动作,完成⿏标其余部分的描绘:10.这个“素描”看起来似乎⽐较单调乏味,没有多少⽴体感,现在给她添加点颜⾊。
在⼯具条中选择Selection⼯具:然后选中外侧轮廓,在Appearance⾯板中选择Fill,设置两个Stop的颜⾊,然后选择Gradient Transform⼯具,调整颜⾊梯度的渐变⽅向:这样,我的⿏标就看起来稍微好些了:上⾯的这个东东灰不溜秋的,还是很别扭。
Wpf入门教程
WPF基础知识快速学习绝不是从零学起的,良好的基础是快速入手的关键,下面先为大家摞列以下自己总结的学习WPF的几点基础知识:1)C#基础语法知识(或者其他.NET支持的语言):这个是当然的了,虽然WPF是XAML配置的,但是总还是要写代码的,相信各位读者应该也都有这个基础了。
2)HTML语言:虽然WPF是窗体程序但是由于使用的XAML语言,如果以前接触过HTML、XHTML、之路的东西的话会,接受这些标签会很有帮助的,如果以前一直是从事win form开的人来说可能就要适应一下了。
3)对C#中的代理、事件要做到熟练掌握,在.NET 3.0版本后有增加了Routed Events,要想日后不糊涂,这个是基础。
4)有一定的winform或经验,主要是对控件事件的处理要有写了解。
5)拥有良好的面向对象的思想:思想是语言的升华(本人的OO思想完全是Java中领悟来的)。
在WPF中,经常要灵活运用各种继承关系、多态、重载等,因此一定要把基础知识打牢固。
6)DataBinding要有所了解:Binding是WPF的一大亮点,在接触它以前如果接触国里面的DataBinding的话对相对起来会容易接受一点,虽然这两个有一定的不同。
7)对设计模式要有一定的了解:当然是越深入越好了,在实际项目中,各种设计模式经常交融使用。
快速的识别并合理的运用,无论是在开发还是调试时都是非常高效的。
另外,WPF存在的初衷即是表现与逻辑的松耦合,最普遍的情况就是XAML 作为表现层,背后.cs文件作为逻辑层。
因此,日后在从事项目工作时,要时刻谨记这一点,千万不可背道而驰。
不要为了凸显自己的某一些代码特长而将各种逻辑混写在一起,这样非常不实际的,这一点都在校生应该尤为重要。
8)对XML的理解:XAML也是XML,对XML的理解绝对有助于快速的接受和使用XAML,并不需要多XML有多么高深的见解。
但是最好还是有空看一看XML相关的书籍/TR/2000/WD-xml-2e-20000814。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
WPF学习笔记 (1)WPF学习笔记列表篇 (1)MVVM架构 (1)XAML语法 (2)绑定Binding (2)依赖属性 (4)附加属性 (5)模板Template: (6)Style 样式 (7)触发器Trriger (8)WPF学习笔记视频整理篇 (11)DEMO1 点击改变文字等 (11)DEMO2使用画布 (11)DEMO3 透明度鼠标事件 (11)Demo4 笔刷 (12)Demo5 渐变笔刷 (13)DEMO6 使用笔刷制作屏幕放大效果 (13)Demo7 外观控制 (16)Demo 8 定义资源套用样式 (16)Demo9 模板 (18)Demo10 画面裁切 (18)Demo 11圆形矩阵转换特效 (19)Demo12 (19)Demo13 2D动画宣告 (20)Demo14 事件触发和动画 (21)Demo16 (22)Demo17 视频播放 (22)Demo18 Binding 数据绑定 (23)Demo19 套用样板和绑定Data (23)Demo20 Master-Details的资料联结 (26)WPF学习笔记WPF学习笔记列表篇MVVM架构MVVM是Model-View-ViewModel的简写此模式可以把UI和业务逻辑分离开,使UI设计人员和业务逻辑人员能够分工明确。
Model:1.web services:通过其获取数据2.rest services3.Generic CollectionsView Model1.属性——Properties实现接口INotifyPropertyChanged2.集合——Collections类型为ObservableCollectionmands——传递Object实现接口ICommandView1.数据绑定到textbox等控件2.数据集合绑定到listbox类型控件mandsXAML语法树形逻辑结构描述<!---->注释语句<></>成对出现或者在< />表示结束使用标签或者后台代码为其赋值。
绑定Binding就是把一个对象属性的值绑定在别的对象的属性上WPF里分三种Binding:Binding,PriorityBinding,MultiBinding,这三种Binding的基类都是BindingBase,而BindingBase又继承于MarkupExtension提供对绑定定义的高级别访问,绑定将绑定目标对象(通常为WPF 元素)的属性与任何数据源(例如数据库、XML 文件或包含数据的任何对象)连接起来。
Text=”{Binding ElementName=treeView, Path=SelectedItem.Header}”绑定源:(一)Bingding的源:有三个属性用来设置源:ElementName(string)、Source(Object) 和RelativeSource(RelativeSource)。
注:这三个只能指定一个,否则异常。
ElementName:源为一个元素(Element),这里用的是此元素中设置的Name属性。
Source:以object作为源。
<TextBlock Text="{Binding Source={StaticResource myDataSource}, Path=PersonName}"/> RelativeSource:源相对于绑定目标的位置。
源是元素本身:{Binding RelativeSource={RelativeSource Self}}源是Tempalte中元素的Parent:{Binding RelativeSource={RelativeSource TemplatedParent}} 源是绑定以collection形式的前一个数据:{Binding RelativeSource={RelativeSource PreviousData}}。
以上三项为RelativeSource中的Static值,使用这些值可以减少内存开销源是Ancestor(可能比parent还高):{Binding RelativeSource={RelativeSource FindAncestor,AncestorLevel=n, AncestorType={x:Type desiredType}}}(二)Path:Binding中的Path是 PropertyPath对象。
1.在最简单的情况下,Path 属性值是要用于绑定的源对象的属性名称,如 Path=PropertyName。
2.通过类似于 C# 中使用的语法,可以指定属性的子属性。
例如,子句 Path=ShoppingCart.Order 将绑定设置为对象的子属性 Order 或属性ShoppingCart。
3.若要绑定到附加属性,请将附加属性用括号括起。
例如,若要绑定到附加属性 DockPanel.Dock,则语法为 Path=(DockPanel.Dock)。
4.在应用了索引器的属性名称之后的方括号内,可以指定属性的索引器。
例如,子句 Path=ShoppingCart[0] 将绑定设置为与属性的内部索引处理文本字符串“0”的方式对应的索引。
此外,还支持多个索引器。
5.Path 子句中可以同时使用索引器和子属性。
例如,Path=ShoppingCart.ShippingInfo[MailingAddress,Street]。
6.在索引器内部,可以有多个由逗号 (,) 分隔的索引器参数。
可以使用圆括号指定每个参数的类型。
例如,可以使用 Path="[(sys:Int32)42,(sys:Int32)24]",其中 sys 映射到 System 命名空间。
7.如果源为集合视图,则可以用斜杠 (/) 指定当前项。
例如,子句 Path=/ 设置到视图中当前项的绑定。
如果源为集合,则此语法指定默认集合视图的当前项。
8.可以结合使用属性名和斜杠来遍历作为集合的属性。
例如,Path=/Offices/ManagerName 指定源集合的当前项,该源集合包含同样是集合的 Offices 属性。
其当前项是包含 ManagerName 属性的对象。
9.也可以使用句点 (.)路径绑定到当前源。
例如,Text=”{Binding}” 等效于Text=”{Binding Path=.}”。
还有其他信息:/wangzhenguo2005@126/blog/static/3714052620108853537710/ 依赖属性依赖属性是一种可以自己没有值,并能通过使用Binding从数据源获得值的属性,拥有依赖属性的对象称为依赖对象,在传统开发中,一个对象所占用的内存在调用new操作符进行实例化的时候就已经决定了,而WPF允许对象在被创建的时候并不包含用于存储数据的空间,只保留在需要用到数据时能够获得默认值、借用其他对象数据或实时分配空间的能力,这种对象就是依赖对象,而这种实时获取数据的能力就是靠依赖属性来实现。
依赖对象的类型是DependencyObject,依赖属性的类型是DependencyPropertyDependencyObject具有GetValue和SetValue两个方法:public object GetValue(DependencyProperty dp){}public void SetValue(DependencyProperty dp, object value){}WPF中所有的控件都是依赖对象,依赖属性必须以依赖对象为宿主,借助它的SetValue 和GetValue方法进行写入与读取。
因此,想使用自定义的依赖属性,宿主一定是依赖对象的派生类,依赖属性有public static readonly三个修饰符修饰,实例使用DependencyProperty.Register方法生成,例如:public static readonly DependencyProperty NameProperty = DependencyProperty.Register("Name", typeof(string), typeof(Student));依赖对象可以通过Binding依赖在其他对象上,即依赖对象是作为数据的目标而存在,所以需要为依赖对象的依赖属性添加了CLR属性包装,有了这个包装,就相当于为依赖对象准备了用于暴露数据的Binding Path、代码:public int MyProperty{get { return (int)GetValue(MyPropertyProperty); }set { SetValue(MyPropertyProperty, value); }}还可以自定义一个SetBinding方法用于简化绑定操作1.public BindingExpressionBase SetBinding(DependencyProperty dp, BindingBase binding)2.{3. return BindingOperations.SetBinding(this, dp, binding);4.}附加属性附加属性是说一个属性本来不属于某个对象,但由于某种需求而被后来附加上,也就是把对象放入一个特定环境后对象才具有的属性就称为附加属性。
附加属性的作用就是将属性与数据类型解耦,让数据类型的设计更加灵活。
举例,一个TextBox被放在不同的布局容器中时就会有不同的布局属性,这些属性就是由布局容器为TextBox附加上的,附加属性的本质就是依赖属性,二者仅仅在注册和包装器上有一点区别小技巧,在VS中输入propa后,连按两次tab键,可以添加好一个附加属性的框架,继续按tab键,可以继续修改附加属性的内容举个例子,Person这个类,放在学校中就会获得年级这个属性,那么准备一个School 类,School类继承DependencyObject,定义一个附加属性1.public class School : DependencyObject2.{3.public static int GetGrade(DependencyObject obj)4. {5.return (int)obj.GetValue(GradeProperty);6. }7.8.public static void SetGrade(DependencyObject obj, int value)9. {10. obj.SetValue(GradeProperty, value);11. }12.13.public static readonly DependencyProperty GradeProperty =14. DependencyProperty.RegisterAttached("Grade", typeof(int), typeof(School), new UIPropertyMetadata(0));15.}可以看到,附加属性已依赖属性有两点不同:一.附加属性使用的RegisterAttached方法,而依赖属性使用的是Register方法二.附加属性使用两个方法进行包装,依赖属性使用CLR属性对GetValue和SetValue两个方法进行包装。