一 · WPF中什么是樣式?
首先明白WPF中樣式屬於資源中重要的一種。
同時樣式也是屬性值的集合,能被應用到一個合適的元素中,或者說能將一組屬性應用到多個元素。
WPF中樣式可以設置任何依賴屬性。
WPF中樣式也支持觸發器,通過屬性的改變,觸發一組活動,包括改變某個控件的樣式。
WPF中元素只能使用一個樣式。
樣式有繼承的特性,樣式可以繼承樣式。
二 · 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。
六 屬性變更通知(INotifyPropertyChanged 和 ObservableCollection<T>)
1 INotifyPropertyChanged向客戶端發出某一屬性值更改的通知。
2 ObservableCollection<T>類,它是實現 INotifyCollectionChanged 接口的數據集合的內置實現。表示一個動態數據集合,在添加項、移除項或刷新整個列表時,此集合將提供通知
七 ResourceDictionary
提供包含元素和 WPF 應用程序的其他元素使用的 WPF 資源的一個哈希表/字典實現。
有利於項目中資源共享。