推薦學習視頻:
深入淺出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。