- 渲染機制(UI線程和Render線程):https://www.cnblogs.com/Zhouyongh/archive/2009/11/30/1613628.html
- 依賴屬性 (優點、定義【屬性是類私有字段的封裝,wpf中使用屬性對依賴屬性進行封裝】、優先級、繼承、附件屬性、驗證和強制、監聽)https://www.cnblogs.com/Zhouyongh/archive/2009/09/10/1564099.html https://www.cnblogs.com/Zhouyongh/archive/2009/10/20/1586278.html
- binding(綁定源、綁定模式【default、OneWay、TwoWay、OntTime、OneWayToSource】、觸發綁定更新的事件【Default、Explicit(手動BindingExpression.UpdayeSource())、PropertyChange、LostFocus】、優先級PriorityBinding),包括綁定到單一屬性、實體、集合、值轉換、觸發機制、驗證等
- 屬性變更通知(INotifyPropertyChange 和ObservableCollection)
- convert轉換器
- trigger(4種,屬性觸發器,數據觸發器,事件觸發器,多條件觸發器)
- template(模板類型【控件模板、數據模板、面板模板】)
- 模板選擇器 https://www.cnblogs.com/smiler/p/3222151.html
- style
- 資源Resources,StaticResource/DynamicResource,靜態資源在引用對象初始化時一次性設置完畢;對於動態資源、如果發生了改變則會重新應用資源
- 邏輯樹【UI界面的組成元素】、可視化樹【邏輯樹的擴展版本,將元素分成更小的部分】
- 事件的三種方式(冒泡、直接、隧道),Routed Events(路由事件),附加事件(attached Events)& Commands (命令)
- icommand
public interface ICommand {
event EventHandler CanExecuteChanged;
bool CanExecute(object parameter);
void Execute(object parameter);
}
- 用戶控件(將控件組合成一個新控件) 自定義控件(重新制造一個控件)自定義控件步驟:https://blog.csdn.net/wlarlen/article/details/78963548
- 跨線程操作(Dispatcher) https://www.cnblogs.com/Zhouyongh/archive/2011/01/12/1933414.html
- 多線程(異步編程和async/await)
- mvvm
- prism(一個MVVM框架,依賴IOC容器)
- 什么是attached behavior(附加行為或者附加事件)?
- WPF和之前的技術交互(WPF/WinForms)
- 弱事件(WeakEventManager),弱引用(WeakReference)https://blog.csdn.net/alicehyxx/article/details/50446355
visual、 uielement、 frameworkelement、 control
MEF(MEF基礎、傳送門、MEF是一個IOC容器,可實現.net程序插件化開發)
引用傳遞 ref out,ref和out都可傳出參數,out參數可為空,且在函數中必須賦值
線程同步、異步、Task
消息機制、消息泵
abstract、virtual、new、override、sealed
PRISM,CAL & CAG等等框架,是否使用過?你們是怎么用的?沒有使用的話,解釋一下自己的開發模式和框架。
WPF 3D和動畫的應用(是否使用過?用過哪些?)。
怎么開發自定義控件?可以簡單介紹一下自己開發的控件。
WPF的性能調整(你是怎么優化WPF性能的?)
聊聊你做WPF的一些經驗和體會。
一· WPF由哪兩部分組成?
wpf 由兩個主要部分組成:引擎和編程框架。
1 引擎。wpf引擎是基於窗體的應用程序圖形視頻音頻和文檔提供了一個單一的運行時庫。重要的是WPF基於矢量的呈現引擎使應用程序可以靈活地利用高DPI監視器,支持圖形的硬件加速。
2 框架。WPF框架為媒體用戶界面設計和文檔提供大量的解決方案。wpf的設計考慮了可擴展性,使開發人員可以完全在WPF引擎的基礎上創建自己的控件,也可以通過對現有WPF控件進行再分類來創建自己的控件。
四·如何理解WPF體系結構?
WPF使用多層架構,類似於三層結構,最頂層部分為托管代碼API,此層用於為開發人員編寫WPF應用程序提供較高層次的服務,基於C#托管代碼編寫。轉換.NET代碼到DirectX的工作由中間層milcore.dll實現。中間層milcore是用非托管代碼實現,因為它需要與DirectX緊密集成,對性能敏感,就是消耗的資源比較多,對性能影響較大。
五· 在WPF中Binding的作用及實現語法?
典型的Binding具有四個重要組成部分:Binding目標對象(binding target object)目標對象屬性(target property)Binding數據源(binding source)Path(用於指明要從數據源中取得的值,就是我們通常寫的屬性名稱)。
二· WPF中什么是模板?
WPF中模板是用於定義或重定義控件結構,或者說對象的外觀。
WPF中模板有兩類,一個是控件模板(ControlTemplate) 另一個是數據模板(DataTemplate),它們都派生自FrameworkTemplate抽象類。
總共有三大模板ControlTemplate,ItemsPanelTemplate,DataTemplate。
1 ControlTemplate 主要用途是更改控件的外觀。它有兩個重要屬性:VisualTree(視覺樹)內容屬性和Triggers觸發器,對於觸發器可以不用過多考慮,觸發器可有可無。VisualTree就是呈現我們所畫的控件。Triggers可以對我們的視覺樹上的元素進行一些變化。
2 ItemsPanelTemplate 是個特殊的空間模板,主要用來標明多條目控件如何顯示它所包含的多項數據。也可以說是指定用於項的額布局的面板。多用於多個內容控件的目標。多為Panel屬性或者Panel結尾的屬性。
3 DataTemplate 主要用於數據的呈現。也被稱為顯示綁定數據對象的模板。
三· 綁定(Binding )的基礎用法
WPF 里分三種:Binding,PriorityBinding,MultiBinding,這三種Binding的基類都是BindingBase,而BindingBase又繼承於MarkupExtension。
常見的使用Binding方法是:
1 針對於繼承於FrameworkElement控件。 SetBinding(DependencyProperty dp,String path),SetBinding(DependencyProperty dp,BindingBase binding),其中FrameworkElement中SetBinding只對DependencyProperty有效。
2 另一種是BindingOperations.SetBinding(currentFolder,TextBlock.TextProperty,binding);
BindingOperations.SetBinding的原型是
public static BindingExpressionBase SetBinding(DependencyObject target,DependencyProperty dp,BindingBase binding)
3 清除Binding:
BindingOperations.ClearBinding(currentFolder,TextBlock.TextProperty);//刪除currentFolder上的TextBlock.TextProperty綁定
BindingOperations.ClearAllBindings(currentFolder);//刪除currentFolder上的所有綁定。
直接對Dependency Property賦值也可以解除binding,不過只對單向binding有效。
四· 解釋這幾個類的作用及關系: Visual, UIElement, FrameworkElement, Control 。
它們四個的關系:從System.Windows.Controls命名空間中看,依次的繼承關系是:
Visual繼承UIElement,UIElement繼承FrameworkElement,FrameworkElement繼承Control。
1 Visual主要作用是為WPF提供2D呈現支持,主要包括輸出顯示,坐標轉換,區域剪切等。
2 UIElement的主要作用是構建WPF元素和基本呈現特征的基類。例如其中定義很多與輸入和焦點有關的特性,例如鍵盤事件,鼠標,還有一些與WPF事件模型有關的API。
3 FrameworkElement的主要作用是為定義的WPF元素添加一些功能。例如,布局定義邏輯樹對象生命周期事件 支持數據綁定和動態資源引用支持樣式和動畫。
4 Control的主要作用是為自定義應用程序控件提供基礎。因為它是創建自定義應用程序控件的基類,作用就是可以重寫Control類所提供的屬性,方法,事件等,為自定義控件添加自定義邏輯。構建WPF應用程序頁面的Window類也派生自它。
五視覺樹VS 邏輯樹?
1 邏輯樹是視覺樹的子集,也就是視覺樹基本上是邏輯樹的一種擴展。
2 WPF通過邏輯樹來解決依賴項屬性繼承和資源的問題,使用視覺樹來處理渲染,事件路由,資源定位等問題。
3 邏輯樹可以認為是XAML所見的,而視覺樹包含了XAML元素內部的結構。
4 邏輯樹的查找可以通過LogicalTreeHelper輔助類,視覺樹的查找可以通過VisualTreeHelper輔助類,其中需要注意的是對ContentElement元素的查找,無法直接通過VisualTreeHelper進行查找,ContentElement元素並不繼承Visual,而ContentElement元素的使用時需要一個ContentElement載體FrameworkContentElement。
七 ResourceDictionary
提供包含元素和WPF 應用程序的其他元素使用的WPF 資源的一個哈希表/字典實現。
有利於項目中資源共享。