天天看點

XAML控件(control)一XAML中控件及其類别

  • 實際上XAML的開發應該是在blend裡面完成,在vs中精調。
  • 一XAML中控件及其類别

    關于控件(control)的概念

    WPF把能展示資料、響應使用者操作的UI元素稱為控件(Control),控件的概念有極大的延伸。控件的概念在WPF有了很大的突破和調整,這樣的調整主要來自于WPF設計理念的改變—-以資料為驅動。

    引述一段原話:

  • 之前幾代的GUI方法論(MFC、windows Form)隻能使用程式設計語言UI設計而WPF有專門用于UI設計的XAML
  • 前幾代在UI與資料互動方面是由windows消息到控件事件一脈相承,始終是把UI控件放在主導地位而把資料放在被動地位,用UI來驅動資料的改變,WPF在事件驅動的基礎上引入了資料驅動的理念,讓資料重歸核心地位而讓UI回歸資料表達者的位置。
  • 什麼意思呢?我的了解是:
  • 傳統在設計UI時,我們的想法主要是:事件之間的聯系與改變,比如點選按鈕,彈出對話框,寫完記錄,送出資料,控件之間的交流與邏輯占主導。而現在,控件為了展示和操作資料,邏輯應該轉為以資料為中心,驅動控件。具體就是:這個集合資料用什麼控件來展示,如果使用者操作了資料,UI應該發生什麼變化,如何傳遞這些資料。說白了,實際上是增加了INotifyPropertyChanged以及binding等主動更新資料的接口,增加了XAML設計UI來完全分離邏輯和UI。
  • 粗略而言,日常工作中打交道最多的控件無外乎6類,即:
  • (1) 布局控件:可以多個控件或其他布局控件,用于在UI上組織和排列控件。Grid、StackPanel、DockPanel等控件都屬于此類,他們擁有共同的父類panel。
  • (2) 内容控件:隻能容納一個其他控件作為内容。由于這個控件可以是布局控件,是以可以極為友善的規劃複雜的内容。共同父類ContentControl。
  • (3)帶标題内容控件:相當于一個内容控件,但是可以加一個标題(Header),标題部分亦可容納一個控件或布局。共同父類HeaderedContentControl。
  • (4)條目控件:可以顯示一列資料,一般情況下這列資料的類型相同。此類控件在顯示集合類型資料方面功能非常強大。共同基類為ItemsControl。
  • <5>帶标題條目控件:相當于一個條目控件加上一個标題顯示區。TreeViewItem、MenuItem都屬于此類控件。這類控件往往用于顯示層級關系資料,結點顯示在其Header區域,子級結點則顯示在其條目區。此類控件的共同基類是HeaderedItemsControl。
  • <6>特殊内容控件:比如TextBox容納可以字元串、TextBlock可以容納可自由控制格式的文本、Image容納圖檔類型資料……這類控件相對比較獨立。
  • 關于内容屬性的概念:
  • 每一個控件都有自己的内容,可以把控件想象成容器,控件通過自己的某個屬性引用着作為其内容的對象,這個屬性稱為内容屬性(content property)。”内容屬性”是個統稱,具體到每種控件上,内容屬性有自己确切的名字—-有的直接叫Content,有的叫Child;有些控件的内容可以是集合,其内容屬性有叫Items或Children的。
  • UI布局(Layout)

    每個布局元素都有自己的特點,即有自己的優點和長處,也有自己的缺點和短處。一定要記清楚每個元素的特點并靈活使用,切莫對每個布局都無所不用其極。選擇合适的布局元素,将會極大地簡化程式設計,反之将會被迫實作一些布局控件原本已經有的功能。另外,設計靜态布局的時候也不能一味地追求簡單,如果各靜态布局間還有動畫作為聯系,就還需要考慮與動畫設計的相容性。

    初學者的常見錯誤,濫用Margin,而不是使用布局元素實作布局!(現在就是這個樣子,慚愧)