WPF入门学习
推荐学习视频:
深入浅出WPF https://www.bilibili.com/video/BV1ht411e7Fe?p=2
强烈推荐WPF入门学习网站:
- https://www.wpf-tutorial.com/
- https://www.c-sharpcorner.com/UploadFile/puranindia/wpf-interview-questions-and-answers/
INotifyPropertyChanged:如果是类实例里的属性更改需要触发XAML改变,则该类需实现INotifyPropertyChanged接口。
Binding:绑定源可以是Wpf元素,.Net公用属性,自定义数据,ado.net数据、xml数据等。UpdateSourceTrigger有Default、Explict、LostFocus、PropertyChanged。
Binding:来源有Source、DataContext、Element、RelativeSource。RelativeSource有FindAncestor、PreviousData、Self、TemplatedParent。
优先级绑定:哪个先有值,就先赋值
ObservableCollection和List对比:ObservableCollection更耗性能;ObservableCollection实现了INotifyCollectionChanged、INotifyPropertyChanged接口,集合里每一条数据增删,都能触发改变。
BindingMode的OneTime、OneWay、TwoWay:OneTime性能较高,字段只需一次性设置则最好设置BindingMode为OneTime。
属性触发器:当依赖属性的值改变时调用。
数据触发器:当.Net普通属性的值改变时调用;监听其他控件的属性值改变时调用。
- https://www.cnblogs.com/sirkevin/archive/2012/10/08/2715036.html
- https://www.wpf-tutorial.com/styles/trigger-datatrigger-event-trigger/
事件触发器:指定的路由事件启动一组动作,永无终止。
- https://www.wpf-tutorial.com/styles/trigger-datatrigger-event-trigger/
- https://docs.microsoft.com/en-us/dotnet/api/system.windows.eventtrigger?view=netframework-4.8。
多触发器和多数据触发器:满足多个条件时,改变属性或行为。
控件模板:自定义控件的外观,相对Style,可以实现更高程度的改变。
数据模板:控制数据的显示方式。
面板模板:自定义存放item的容器,控制item的排序方式。
层级模板:针对层级数据结构设计,每一个层级上都可以做DataTemplate。使用控件:TreeViewItem、MenuItem。
模板选择器:动态的选择模板,继承DataTemplateSelector,覆盖SelectTemplate方法。
逻辑树和可视化树:wpf控件的模板是视觉树、wpf控件之间的层次结构是逻辑树。
依赖属性:1、使用属性对依赖属性进行包装,关键字有DependencyObject、DependencyProperty、Register;2、可以多处设置依赖属性值、但是有优先级之分,但有些值必须先满足某些条件才能显示;3、使得依赖属性可以被继承,被继承的依赖属性在注册时设置元数据默认值模式为“继承”,继承元素依赖属性使用“AddOwer”方法;4、只读依赖属性,private DependencyPropertyKey 代替 public DependencyProperty,RegisterReadOnly代替Register,属性包装器的SetValue方法设为私有或去掉。
- https://www.cnblogs.com/zhili/p/WPFDependencyProperty.html
- https://riptutorial.com/wpf/example/9859/read-only-dependency-properties
附加属性:和依赖属性的不同,Register换为RegisterAttached,属性包装器换成静态方法。
自定义路由事件:RouteEvent、RouteEventArgs,触发路由事件,路由事件策略。
附加事件:附加事件是路由事件的一种,路由事件的宿主是UI元素,附加事件的宿主是非UI元素。
命令:可以和数据绑定集成。通常,应用程序逻辑应该总是通过命令的方式来实现的,而不是事件处理程序。对于很多需要直接挂接到事件处理过程上的常见例子,用触发器来处理更好。
转换器:实现IValueConverter接口,Convert方法是指源到目标的转换,ConvertBack是指目标到源的转换。返回值DependencyProperty.UnsetValue表示转换器没有生成任何值。
跨线程调用控件:获取控件Dispatcher,然后Invoke对控件的修改。
Style:属性、资源、触发器。显示、隐式设置Style。Style的Merge、优先级、BaseOn继承、换肤。
MVVM: View对应一个ViewModel,ViewModel可以聚合N个Model,ViewModel可以对应多个View
- https://www.cnblogs.com/fly-bird/p/8699105.html
- https://www.c-sharpcorner.com/UploadFile/0b73e1/mvvm-model-view-viewmodel-introduction-part-1/
Resource:StaticResource只解析一次,DynamicResource则发生更改就解析。资源类型也可以是各种CLR对象。资源范围可以分三种:特定控件的本地化,窗口级别,Application级别。可以通过key关键字显示引用资源。查找资源都是向上找的,先更本地化的特定控件,再窗口,再到应用程序,只要找到了就终止。
旋转变换:RotateTransform 设置控件顺时针角度变换,Angel设置顺时针角度,CenterX轴在竖的方向,CenterY轴在横的方向。
WindowStyle属性:窗口边框和右上角按钮的变化,默认WindowStyle.SingleBorderWindow。