1. 程式人生 > 其它 >【WPF】Panel

【WPF】Panel

一. 總體介紹

        WPF的佈局控制元件都在System.Windows.Controls.Panel這個基類下面,使用 WPF提供的各種控制元件在WPF應用程式中介面進行佈局,同時對各種子控制元件(如按鈕、文字框,下拉框等)進行排列組合。

Pane類的公共屬性太多了。就簡單介紹幾個常見的屬性如下表。

  

名稱

說明

Cursor

獲取或設定在滑鼠指標位於此元素上時顯示的游標。 

DataContext

獲取或設定元素參與資料繫結時的資料上下文。 

Dispatcher

獲取與此 DispatcherObject 關聯的 Dispatcher。 

FontFamily

獲取或設定控制元件的字體系列。 

FontSize

獲取或設定字號。 

FontWeight

獲取或設定指定的字型的權重或粗細。 

Foreground

獲取或設定描述前景色的畫筆。 

HandlesScrolling

獲取一個值控制元件是否支援滾動。

Height

獲取或設定元素的建議高度。 

HorizontalContentAlignment

獲取或設定控制元件內容的水平對齊。 

IsLoaded

獲取一個值,該值指示是否已載入此元素以供呈現。 

IsMouseOver

獲取一個值,該值指示滑鼠指標是否位於此元素(包括可視樹上的子元素)上。這是一個依賴項屬性。 

IsTabStop

獲取或設定一個值控制是否在選項卡上導航包含。 

IsVisible

獲取一個值,該值指示此元素在使用者介面 (UI) 中是否可見。這是一個依賴項屬性。 

LayoutTransform

獲取或設定在執行佈局時應該應用於此元素的圖形轉換方式。 

Margin

獲取或設定元素的外邊距。 

Name

獲取或設定元素的標識名稱。 該名稱提供一個引用,以便當 XAML 處理器在處理過程中構造標記元素之後,程式碼隱藏(如事件處理程式程式碼)可以對該元素進行引用。

Opacity

獲取或設定當 UIElement 在使用者介面 (UI) 中呈現時為其整體應用的不透明度因子。這是一個依賴項屬性。 

Padding

獲取或設定控制元件中的空白。 

RenderTransform

獲取或設定影響此元素的呈現位置的轉換資訊。這是一個依賴項屬性。 

TabIndex

獲取或設定使用 tab 鍵時,確定順序接收焦點的元素的值,當用戶將控制元件定位。 

Tag

獲取或設定任意物件值,該值可用於儲存關於此元素的自定義資訊。 

ToolTip

獲取或設定在使用者介面 (UI) 中為此元素顯示的工具提示物件。 

TouchesCaptured

獲取在此元素上捕獲的所有觸控裝置。 

TouchesCapturedWithin

獲取在此元素或其視覺化樹中的任何子元素上捕獲的所有觸控裝置。 

VerticalContentAlignment

獲取或設定控制元件內容的垂直對齊方式。 

Visibility

獲取或設定此元素的使用者介面 (UI) 可見性。這是一個依賴項屬性。 

VisualOpacityMask

獲取或設定 Brush 值,該值表示 Visual 的不透明蒙板。 

Width

獲取或設定元素的寬度。 

       一個Panel 的呈現就是測量和排列子控制元件,然後在螢幕上繪製它們。所以在佈局的過程中會經過一系列的計算,那麼子控制元件越多,執行的計算次數就越多,則效能就會變差。如果不需要進行復雜的佈局,則儘量少用複雜佈局控制元件(如 Grid和自定義複雜的Panel);如果能簡單佈局實現就儘量使用構造相對簡單的佈局(如 Canvas、UniformGrid等),這種佈局可帶來更好的效能。 如果有可能,我們應儘量避免呼叫 UpdateLayout方法。 
      每當Panel內的子控制元件改變其位置時,佈局系統就可能觸發一個新的處理過程。對此,瞭解哪些事件會呼叫佈局系統就很重要,因為不必要的呼叫可能導致應用程式效能變差。 
       換句話說,佈局是一個遞迴系統,實現在螢幕上對控制元件進行大小調整、定位和繪製,然後進行呈現。具體如下圖,要實現控制元件0的佈局,那麼先要實現0的子控制元件 01,02...的佈局,要實現01的佈局,那麼得實現01的子控制元件001,002...的佈局,如此迴圈直到子控制元件的佈局完成後,再完成父控制元件的佈局, 最後遞歸回去直到遞迴結束,這樣整個佈局過程就完成了.

      佈局系統為Panel中的每個子控制元件完成兩個處理過程:測量處理過程(Measure)和排列處理過程(Arrange)。每個子 Panel 均提供自己的 MeasureOverride 和 ArrangeOverride 方法,以實現自己特定的佈局行為。