WPF核心對象模型-類圖和解析


1

DispatcherObject是根基類,通過繼承該類,可以得到訪問創建該對象的UI線程的Dispatcher對象的能力。通過Dispatcher對象,可以將代碼段合並入該UI線程執行。

DependencyObject是核心基類,用於實現依賴屬性機制。依賴屬性是一個比CLR屬性更強大的屬性模型,該模型支持更改通知,默認值繼承等特性,並能減少屬性存儲空間。DependencyObject通過GetValue和SetValue等方法支持依賴屬性機制。繼承該類的幾個下一層基類Visual,Visual3D,TriggerBase, Freezable及其派生類都獲得了依賴屬性機制的支持。

代表依賴屬性的是DependencyProperty類,其中包含名稱,所屬類型,屬性類型等屬性,通過Register靜態方法注冊依賴屬性,通過RegisterAttached靜態方法注冊附加屬性。

直接繼承根基類DispatcherObject的還有FrameworkTemplate和Style,FrameworkTemplate用於支持模板機制,Style用於支持樣式機制。

繼承FrameworkTemplate的包括數據模板DataTemplate,控件模板ControlTemplate,項面板模板ItemsPanelTemplate。定制數據呈現方式使用DataTemplate,可指定DataType用於統一定制某數據類型的呈現方式。HierarchicalDataTemplate繼承DataTemplate,代表有層次結構的數據模板,可通過ItemsSource指定子級數據綁定的數據源,通過ItemTemplate指定子級數據的呈現方式。定制控件呈現方式使用ControlTemplate,可設置觸發器。定制多項內容控件的條目布局方式使用ItemsPanelTemplate。

Style類用於樣式抽取,樣式和其他資源放在資源字典ResourceDictionary中。Style通過TargetType屬性指定作用的類型,通過BasedOn屬性指定基樣式,通過在Setters中加入Setter設置屬性對應的值,還可在Triggers中加入觸發器。

ResourceDictionary可通過MergedDictionaries進行資源字典合並,通過Source指定引用的資源字典地址,通過索引器查找資源。

RoutedEvent類用於支持另一個重要機制路由事件,RoutedEvent的屬性包含名稱,所屬類型,路由策略和處理器類型。通過EventManager的RegisterRoutedEvent靜態方法注冊路由事件。

DispatcherTimer是UI線程定時器,可設置間隔Interval,是否啟用IsEnabled,通過Tick事件指定處理邏輯,通過Start和Stop方法開始和停止定時器。

Application代表應用程序,通過Current得到當前實例,MainWindow得到主窗口,可在Resources中添加應用程序級資源,通過StartupUri設置啟動頁面。

核心基類DependencyObject的直接派生類為Visual,Visual3D,TriggerBase和Freezable。

Visual代表2D可視元素, Visual3D代表3D可視元素,UIElement3D繼承Visual3D代表3D UI元素,其又有兩個派生類ModelUIElement3D和ContainerUIElement3D 。

TriggerBase用於支持觸發器機制,其派生類包括Trigger,MultiTrigger,DataTrigger,MultiDataTrigger和EventTrigger。

Animatable是Freezable的派生類,其又有兩個派生類Brush和ImageSource分別代表畫刷和圖片源。畫刷包括純色畫刷SolidColorBrush,可設置顏色Color,漸變畫刷GradientBrush,可設置漸變端點GradientStop,和瓷磚畫刷TileBrush,可設置拉伸方式。GradientBrush又分為線性Linear和徑向Radial兩種。圖片畫刷ImageBrush是一種TileBrush,可設置圖片源ImageSource。

ImageSource的派生類包括位圖圖片源BitmapSource,繪畫圖片源DrawingImage和3D圖片源D3DImage,BitmapSource又有位圖圖片BitmapImage和可寫位圖圖片WriteableBitmap兩個派生類。

直接繼承UIElement的是FrameworkElement,UIElement位於WPF核心層PresentationCore中,FrameworkElement及其派生類位於WPF框架層PresentationFramework中。UIElement提供了裁剪Clip,命令綁定CommandBindings,輸入綁定InputBindings,是否可用IsEnabled,透明度Opacity,渲染變換RenderTransform,可見性Visibility等屬性,通過RaiseEvent方法觸發路由事件。FrameworkElement提供了鼠標光標Cursor,數據上下文DataContext,寬高,水平垂直對齊,外邊距Margin,資源集合Resources,樣式Style,Tag,工具提示ToolTip,觸發器集合Triggers等屬性,通過SetBinding方法設置綁定。

VisualStateManager,VisualStateGroup和VisualState用於實現可視狀態管理機制。

控件Control, 文本塊TextBlock,圖片Image,頁Page,裝飾Decorator,面板Panel,彈出層Popup,形狀Shape等直接繼承FrameworkElement,它們都是框架元素。

TextBlock可設置文本Text和文本對齊方式TextAlignment。Image可設置源Source和拉伸方式Stretch。Page可設置內容Content和標題Title。Popup可設置子元素Child,是否打開IsOpen,位置Placement等屬性。

Decorator是裝飾元素的基類,可設置子元素Child,存在邊框Border和查看框Viewbox兩個派生類。Border可設置背景Background,邊框畫刷BorderBrush,邊框寬度BorderThickness,圓角半徑CornerRadius和內邊距Padding。Viewbox可設置拉伸方式Stretch和拉伸方向StretchDirection。

Panel是布局容器的基類,可設置背景,可添加子元素。其派生類有網格布局Grid,可設置行列定義,堆積布局StackPanel,可設置方向,畫布布局Canvas,停靠布局DockPanel,流式布局WrapPanel,可設置排列方向和項的寬高,統一網格布局UniformGrid,還有虛基類VirtualizingPanel。VirtualizingStackPanel是VirtualizingPanel的一種實現。

Shape是形狀的基類,包含填充畫刷Fill,線框畫刷Stroke,線框寬度StrokeThickness,拉伸方式Stretch等屬性。其派生類為矩形Rectangle,橢圓Ellipse,線Line和路徑Path。

最后說一下Control極其派生類體系。Control包含背景Background,邊框畫刷BorderBrush,邊框寬度BorderThickness,字體FontFamily,字號FontSize,字的粗細FontWeight,前景色Foreground,水平和垂直內容對其方式,內邊距Padding和控件的模板Template。其派生類包括ContentControl和ItemsControl兩個大族,分別代表有單項內容的控件和有多項內容的控件,以及TextBoxBase和RangeBase等小族。

RangeBase的派生類為ProgressBar和Slider。TextBoxBase的派生類為TextBox和RichTextBox。

ContentControl有單項內容,可設置內容Content,內容模板ContentTemplate,或內容模板選擇器ContentTemplateSelector。 存在窗口Window,用戶控件UserControl,工具提示ToolTip,滾動查看器ScrollViewer,框架Frame等派生類,以及有頭部的單項內容控件HeaderedContentControl和基按鈕ButtonBase兩個重要的派生類。

HeaderedContentControl可設置頭部Header,頭部模板HeaderTemplate,或頭部模板選擇器HeaderTemplateSelector,派生類為展開器Expander,組容器GroupBox,標簽頁項TabItem等。

ButtonBase可設置點擊模式ClickMode,命令Command,命令參數CommandParameter,派生類為按鈕Button和切換按鈕ToggleButton。ToggleButton可以設置是否選中IsChecked和是否為三態IsThreeState, 又有單選框RadioButton和復選框CheckBox兩個派生類,其中RadioButton可設置組名GroupName。

ItemsControl有多項內容,可設置綁定數據源ItemsSource,項模板ItemTemplate,或項模板選擇器ItemTemplateSelector,項面板ItemsPanel,項容器樣式ItemContainerStyle,或項容器樣式選擇器ItemContainerStyleSelector等屬性。存在有頭部的多項內容控件HeaderedItemsControl和選擇器Selector兩個派生類。

HeaderedItemsControl可設置頭部Header,頭部模板HeaderTemplate,或頭部模板選擇器HeaderTemplateSelector,派生類為樹視圖項TreeViewItem等。

Selector可設置選擇索引SelectedIndex或選擇項SelectedItem,派生類為多選擇器MultiSelector,下拉框ComboBox,列表框ListBox和標簽頁控件TabControl。DataGrid是MultiSelector的派生類。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM