Windows Presentation Foundation (WPF) has a lot of controls that can be highly customized.
Every WPF control has a
Template which is the main control template, you can overwrite a control template entirely.
Most of WPF controls inherit from
ContentControl which allows you to put anything inside them. A
ListBox for example allows you to put highly customized controls for each item bound. An example of listbox items can be found in the image bellow. Each item is rendered as a sort of rectangle with some text inside.
The controls that inherit from
ItemsControl are controls that support a collection of objects.
These controls can be used to display a collection of objects on the screen. For example, controls like
ComboBox can be used to allow the user to select an object from a collection.
This post covers some of the most common controls found in forms.
All controls where the user can input data have by default the binding set to two-way mode. It means bound data will be updated on the source if the user change values on the screen (given that the model implements INotifyPropertyChanged).
Windows Presentation Foundation (WPF) has the called Panel controls. Those are controls that can contain a set of child controls.
Each Panel has its own particular way of organizing controls.