wpf 基础:
- 绑定,不会绑定谈不上懂wpf
- 布局,不管是web还是winform,都必须要会布局,布局基础类Panel
- 触发器,要想用好wpf,触发器必须要会
- 样式,给软件穿衣服,布局和样式一般是放到一起说,类似html+css
- 命令,命令也是wpf一大特点,必须要懂的基础
- 依赖属性
- 模板
- 路由和事件
- 资源
进阶:
- MEF
- Prism
- MVMLight
- 动画(Animation、TimeLine、StoryBoard、Thumb、Transform(二维图像变换,缩放、旋转、平移、扭曲))
- 用户控件和自定义控件
- 视觉树和逻辑树
- 工作线程更新UI
资源: Resource 动态资源和静态资源:静态资源在引用对象初始化时一次性设置完毕;对于动态资源、如果发生了改变则会重新应用资源 资源字典:ResourceDictionary 样式: 触发器:属性触发器、事件触发器- 资源和样式
三种模板:控件模板、数据模板、面板模板 FrameworkTemplate 逻辑树、可视化树 逻辑树:UI界面的组成元素结构(Button是一个逻辑树元素) 可视化树:逻辑树的扩展版本,它将元素分成更小的部分(逻辑树Button由多个可视化树元素构成) VisualTreeHelper类和LogicTreeHelper类:帮助查看逻辑树和可视化树- wpf模板
Panel是布局容器的基类 1. 布局过程 a. 测量,每个Panle都提供了自己的MeasureOverride b. 排列,每个Panle都提供了自己的ArrangeOverride 2. Canvas a. 默认不剪裁超出自身范围的内容(ClipToBounds=false) b. 元素默认显示在画布的左上方 3. StackPanel a. 将子元素按照堆栈的形式排列(横排、竖排) b. 默认剪裁超出范围的内容 c. Orientation 设置元素的排列方向及默认宽高 4. 自定义布局控件- wpf布局
1. 绑定xaml元素对象 ElamentName、path 2. 绑定模式Model:Default、OneWay、TwoWay、OntTime、OneWayToSource 3. 绑定更新,触发更新的事件:Default、Explicit(手动BindingExpression.UpdayeSource())、PropertyChange、LostFocus 非元素对象 1. 绑定源:默认DataContext,从自身开始往父级查找,直至第一个非空DataContext 2. 绑定源:Source,指向源对象的引用 3. 绑定源:RelativeSource,指定绑定源在xaml布局中的相对位置,默认null 提高大列表性能:UI虚拟化 Converter 转换器 StringFormat TargetNullValue 空值时的默认值 FallbackValue 绑定目标发生错误时的默认值 PriorityBinding 加载时间比较多的时候,要显示的信息,比如显示“正在加载中…”- wpf绑定
1. 依赖属性的优点: a. 加入了属性变化通知、限制、验证等功能 b. 节约内存?相对winform c.支持多种提供对象、通过多种方式设置依赖属性值,配合表达式、样式和绑定来对依赖属性进行设置值 2. 依赖属性的定义 a 属性是类私有字段的封装,wpf中使用属性对依赖属性进行封装 3. 依赖属性的优先级: 动画》绑定》本地值》自定义Style Trigger》自定义Templdate Trigger》自定义Style Setter 》默认Style Trigger》默认Style Setter》继承值》默认值 4. 依赖属性的继承(并不是所有元素都支持属性值继承) 5. 只读依赖属性 6. 附加属性:例如:Dock.Top Grid.Row 7. 依赖属性验证和强制:ValidateValueCallback、CoerceValueCallback 8. 依赖属性的监听: 9. wpf依赖属性的事件机制- wpf依赖属性
- wpf命令
- wpf路由事件
主要作用是根据trigger的不同条件来自动更改外观属性,或者执行动画等操作。主要是改变外观(包括布局、形状、颜色、动画等)。 触发器类型:Trigger、MultiTrigger、DataTrigger、MultiDataTrigger、EventTrigger Trigger: 普通的属性触发器(由属性改变触发) EventTrigger : 事件触发器(由事件触发) MultiTrigger :普通的多属性触发器(由多个属性控制触发) DataTrigger : 数据触发器(由绑定的数据触发) MultiDataTrigger: 多数据触发器(由绑定的多个数据控制触发) 用好触发器可少写很多代码,写出非常优秀的代码,触发器是一个很好的东西 主要运用的场景在Style、ControlTemplate、DataTemplate- wpf触发器
Transform:二维图形变换,缩放、旋转、平移、扭曲 Animation:基于Timeline的动画处理 StoryBoard:基于Timeline的目标一或多Animation的动画处理 Timeline:时间控制,Animation和StoryBoard都是Timeline的派生类,动画时间长度、开始时间、重复次数、进度的快慢,结束通知等都由Timeline控制 1. DoubleAnimation Double类型目标属性的动画处理 From 起始值 To 结束值,动画结束时的目标属性值为 To By 偏移值,动画结束时的目标属性值为 From+By,设置了To将会忽略By 2. Timeline AnimationTimeline 用于属性过渡,例如Width变化 MediaTimeline:用于控制媒体文件播放的时间线 ParallelTimeline:是一种可对其他时间线进行分组的时间线,可用于实现较复杂的动画 Storyboard:一种特殊的 ParallelTimeline,可为其包含的时间线提供对象和属性目标信息 TimelineGroup:可包含其他 Timeline 对象的 Timeline 对象的抽象类 常见属性 Duration: 动画播放时间长度 RepeatBehavior: 重复行为(重复次数) FillBehavior: 动画结束后的行为(保持动画的结束状态或恢复到初始状态) AutoReverse: 按相反的顺序重复播放动画 SpeedRatio: 动画播放速率(用于加速或减速播放) BeginTime: 动画播放的起始时间 Clock:对时间线的控制操作,如:开始、停止、暂停等。它们是通过Clock对象的Controller属性来进行的。 3. DoubleAnimation 缓动函数 EasingFunction ,用来模拟物理效果,例如弹跳、弹簧等,一般用于From/To/By动画上,使得其动画更加平滑 4. 关键帧动画 5. 路径动画,按指定的path移动的动画 6. StoryBoard- wpf动画
Dispatcher 更新UI线程 STA 单线程模型 如果一个Dispatcher对象在一个线程中被创建,则该Dispatcher对象将是该关联线程的唯一Dispatcher对象 在线程中创建一个DispatcherObject对象(例如在线程中创建一个窗体或控件)时,将会创建一个Dispatcher对象,如果之前没有Dispatcher对象 Dispatcher对象关闭后将不能重启,关联的线程也不能再创建一个Dispatcher对象 在wpf中,一般是主线程创建UI对象,所以所有UI对象的Dispatcher对象都是同一个。 在wpf中,其他线程只能通过关联的Dispatcher对象访问DispatcherObject对象(例如后台线程不能直接更新UI线程的Button对象,需要通过Button对象关联的Dispatcher对象进行访问,为了使后台线程更新Button的Content属性,后台线程必须通过Dispatcher对象的Invoke或BeginInvoke操作将工作委托给Button关联的Dispatcher对象 Invoke和BeginInvoke将操作添加到Diapatcher的指定DispatcherPriority队列 DispatcherPriority :操作队列,有优先级- wpf dispatcher