WPF入门学习

一世执手 提交于 2020-04-26 11:40:39

强烈推荐WPF入门学习网站:

  1. https://www.wpf-tutorial.com/

 

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普通属性的值改变时调用;监听其他控件的属性值改变时调用。

事件触发器:指定的路由事件启动一组动作,永无终止。

多触发器和多数据触发器:满足多个条件时,改变属性或行为。

控件模板:自定义控件的外观,相对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方法设为私有或去掉。

附加属性:和依赖属性的不同,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

Resource:StaticResource只解析一次,DynamicResource则发生更改就解析。资源类型也可以是各种CLR对象。资源范围可以分三种:特定控件的本地化,窗口级别,Application级别。可以通过key关键字显示引用资源。查找资源都是向上找的,先更本地化的特定控件,再窗口,再到应用程序,只要找到了就终止。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!