A couple of weeks ago, I started a series of articles about WPF internals organization. In the first article I did a tour of the core WPF classes. In this second part, I’m reviewing the organization of the various controls that exist in the framework.
Because the image of the diagram is pretty big, I decided to use Silverlight DeepZoom and the result is just below this text 🙂 You can download the full image resolution here. Please use the full screen button in the upper right corner of the viewer for the best browsing experience.
Here are general remarks that might help you get information from those diagrams.
The top level Control class:
- Defines general UI properties such as Background, Foreground, BorderBrush and BorderThickness
- Defines a set of properties to control font rendering: FontFamily, FontSize, FontStyle…
- Has a DoubleClick event (other mouse events such as MouseUp/MouseDown comes from the UIElement class)
Below the Control class, we have (this list is not complete):
- The ContentControl class: those controls have… a single Content
- The ItemsControls class which handles a collection of child controls
- The TextBoxBase class which is the parent of TextBox and RichTextBox
- The RangerBase class which handles a range (minimum, maximum) and which is the parent of the ScrollBar, Slider and ProgressBar classes
- The Thumb class which has the ability to be dragged over a surface
Below the ContentControl class we can find many existing WPF controls:
- ButtonBase and its child: Button, ToggleButton and RepeatButton
- Label (see this post for an explanation of the differences between a Label and a TextBlock)
- ListBoxItem and its children: ListViewItem, ComboBoxItem
- HeaderedContentControl, a ContentControl that has both a Content and a Header. This is the case of the Expander, GroupBox and TabItem controls
General other remarks:
- It’s funny to see that both Window and UserControl inherits from ContentControl. Before doing the diagram I though that Window came from somewhere else 🙂
- Having those diagrams in mind (or on a screen !) is very useful when you need to create your own custom control
- We can see the differences between creating a custom control (inherit from Control or derived class) and a UserControl (inherit from UserControl)
- .Net4 will introduce new controls (not in this diagram) in the WPF framework such: DataGrid, Calendar, TimePicker