UI

  • Windows Forms

    Windows Forms is a UI framework for building Windows desktop apps. It provides one of the most productive ways to create desktop apps based on the visual designer provided in Visual Studio. Functionality such as drag-and-drop placement of visual controls makes it easy to build desktop apps.

  • WPF

    Windows Presentation Foundation (WPF) is a UI framework that is resolution-independent and uses a vector-based rendering engine, built to take advantage of modern graphics hardware. WPF provides a comprehensive set of application-development features that include Extensible Application Markup Language (XAML), controls, data binding, layout, 2D and 3D graphics, animation, styles, templates, documents, media, text, and typography. WPF is part of .NET, so you can build applications that incorporate other elements of the .NET API.

  • MAUI

    .NET Multi-platform App UI (.NET MAUI) is a cross-platform framework for creating native mobile and desktop apps with C# and XAML. Using .NET MAUI, you can develop apps that can run on Android, iOS, macOS, and Windows from a single shared code-base.

MVVM

The MVVM pattern helps cleanly separate an application's business and presentation logic from its user interface (UI). Maintaining a clean separation between application logic and the UI helps address numerous development issues and makes an application easier to test, maintain, and evolve. It can also significantly improve code re-use opportunities and allows developers and UI designers to collaborate more easily when developing their respective parts of an app.

Frameworks:

mvvm #direction: right #spacing: 10 #gravity: .8 #arrowSize: 4 #title: mvvm [<actor> User] <- [<label>interacts] -> [<transceiver>View] [<transceiver>View Model] [<transceiver>Model] [<note>Implements the INotifyPropertyChanged interface] -- [View Model] [View] -- [<note>Binding is possible to Dependency properties of Controls] [<transceiver>Binding] [View] <- [<label>Updates view]- [<reference>Binding] <- [<label>Observes View Model] - [View Model] [View] -[<label>Dependency Property changes updae it]-> [<reference>Binding] - [<label>Updates]-> [View Model] [View Model] <-[<label>Reads model]- [Model] [View Model] - [<label>Updates model] -> [Model] [<note>May include an optional converter that is either an IValueConverter or IMultiValueConverter instance] -- [Binding] User interacts View View Model Model Implements the INotifyPropertyChanged interface Binding is possible to Dependency properties of Controls Binding Updates view Observes View Model Dependency Property changes updae it Updates Reads model Updates model May include an optional converter that is either an IValueConverter or IMultiValueConverter instance

MVVM Data flow

Minimal MVVM Implementation

public abstract class ViewModelBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler? PropertyChanged;

    protected void OnPropertyChanged(string propertyName = "") 
        => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

    protected void SetValue<T>(ref T field,
                               T newValue,
                               [CallerMemberName] string properyName = "")
    {
        if (!EqualityComparer<T>.Default.Equals(field, newValue))
        {
            field = newValue;
            OnPropertyChanged(properyName);
        }
    }

    protected void SetValue<T>(ref T field,
                               T newValue,
                               IEqualityComparer<T> comparer,
                               [CallerMemberName] string properyName = "")
    {
        if (!comparer.Equals(field, newValue))
        {
            field = newValue;
            OnPropertyChanged(properyName);
        }
    }
}
public class RelayCommand : ICommand
{
    private readonly Action<object?> _acton;
    private readonly Predicate<object?>? _canExecute;

    public event EventHandler? CanExecuteChanged;

    public RelayCommand(Action<object?> acton, Predicate<object?>? canExecute = null)
    {
        _acton = acton;
        _canExecute = canExecute;
    }

    public void RaiseCanExecuteChanged()
        => CanExecuteChanged?.Invoke(this, EventArgs.Empty);

    public bool CanExecute(object? parameter)
        => _canExecute == null || _canExecute(parameter);

    public void Execute(object? parameter)
        => _acton.Invoke(parameter);
}

WPF class hierarchy

#.box: fill=#C06EF0 [Object ] <:- [<box>DispatcherObject] <:- [DependencyObject] <:- [Visual] <:- [UIElement] <:- [<box>FrameworkElement] <:- [<box>Control] [DependencyObject] <:- [Freezable] <- [<box>Animatable] [Visual] <:- [Viewport3DVisual] [Visual] <:- [Visual3D] [Visual3D] <:- [ModelVisual3D] [Visual3D] <:- [Viewport2DVisual3D] [Visual3D] <:- [UIElement3D] <:- [ContainerUIElement3D] [Object] <:- [PrintDialog] [Object] <:- [CommonDialog] <:- [CommonItemDialog] <:- [FileDialog] <:- [SaveFileDialog] [FileDialog] <:- [OpenFileDialog] [CommonItemDialog] <:- [OpenFolderDialog] Object DispatcherObject DependencyObject Visual UIElement FrameworkElement Control Freezable Animatable Viewport3DVisual Visual3D ModelVisual3D Viewport2DVisual3D UIElement3D ContainerUIElement3D PrintDialog CommonDialog CommonItemDialog FileDialog SaveFileDialog OpenFileDialog OpenFolderDialog

  • DispatcherObject

    Represents an object that is associated with a Dispatcher. The Dispatcher Provides services for managing the queue of work items for a thread.

  • DependencyObject

    Represents an object that participates in the dependency property system.

  • Visual

    Provides rendering support in WPF, which includes hit testing, coordinate transformation, and bounding box calculations.

  • UIElement

    UIElement is a base class for WPF core level implementations building on Windows Presentation Foundation (WPF) elements and basic presentation characteristics.

  • FrameworkElement

    Provides a WPF framework-level set of properties, events, and methods for Windows Presentation Foundation (WPF) elements. This class represents the provided WPF framework-level implementation that is built on the WPF core-level APIs that are defined by UIElement.

  • Control

    Represents the base class for user interface (UI) elements that use a ControlTemplate to define their appearance.

  • Freezable

    Defines an object that has a modifiable state and a read-only (frozen) state. Classes that derive from Freezable provide detailed change notification, can be made immutable, and can clone themselves.

  • Animatable

    Abstract class that provides animation support.

  • Visual3D

    Provides services and properties that are common to visual 3-D objects, including hit-testing, coordinate transformation, and bounding box calculations.

#.box: fill=#C06EF0 [<box>DispatcherObject] <:- [FrameworkTemplate] [FrameworkTemplate] <:- [ControlTemplate] [FrameworkTemplate] <:- [ItemsPanelTemplate] [FrameworkTemplate] <:- [DataTemplate] [DataTemplate] <:- [ItemContainerTemplate] [DataTemplate] <:- [HierarchicalDataTemplate] DispatcherObject FrameworkTemplate ControlTemplate ItemsPanelTemplate DataTemplate ItemContainerTemplate HierarchicalDataTemplate

  • ControlTemplate

    Specifies the visual structure and behavioral aspects of a Control that can be shared across multiple instances of the control.

  • ItemsPanelTemplate

    Specifies the panel that the ItemsPresenter creates for the layout of the items of an ItemsControl.

  • DataTemplate

    Describes the visual structure of a data object.

  • ItemContainerTemplate

    Provides the template for producing a container for an ItemsControl object.

  • HierarchicalDataTemplate

    Represents a DataTemplate that supports HeaderedItemsControl, such as TreeViewItem or MenuItem.

#direction: right #spacing: 12 #.box: fill=#C06EF0 [<box>Animatable] <:- [Camera] <:- [ProjectionCamera] <:- [PerspectiveCamera] [Animatable] <:- [Geometry3D] <:- [MeshGeometry3D] [Animatable] <:- [Model3D] <:- [Light] <:- [DirectionalLight] [Animatable] <:- [GeneralTransform3D] <:- [Transform3D] [Transform3D] <:- [AffineTransform3D] [Transform3D] <:- [MatrixTransform3D] [Transform3D] <:- [Transform3DGroup] [AffineTransform3D] <:- [RotateTransform3D] [AffineTransform3D] <:- [ScaleTransform3D] [AffineTransform3D] <:- [TranslateTransform3D] [GeneralTransform3D] <:-[GeneralTransform3DGroup] [Animatable] <:- [Material] <:- [MaterialGroup] [Material] <:- [DiffuseMaterial] [Material] <:- [EmissiveMaterial] [Material] <:- [SpecularMaterial] [Model3D] <:- [GeometryModel3D] [Model3D] <:- [Model3DGroup] [ProjectionCamera] <:- [OrthographicCamera] [Light] <:- [PointLightBase] <:- [SpotLight] [Light] <:- [AmbientLight] [PointLightBase] <:- [PointLight] [Animatable] <:-[Brush] <:- [TileBrush] <:- [VisualBrush] [Brush] <:- [BitmapCacheBrush] [TileBrush] <:- [DrawingBrush] [TileBrush] <:- [ImageBrush] [Animatable] <:- [Drawing] [Animatable] <:- [Pen] [Drawing] <:- [DrawingGroup] [Drawing] <:- [GeometryDrawing] [Drawing] <:- [GlyphRunDrawing] [Drawing] <:- [ImageDrawing] [Drawing] <:- [VideoDrawing] [ImageSource] <:- [D3DImage] [ImageSource] <:- [DrawingImage] [Animatable] <:- [ImageSource] <:- [BitmapSource] <:- [BitmapImage] [BitmapSource] <:- [InteropBitmap] [BitmapSource] <:- [BitmapFrame] [BitmapSource] <:- [CachedBitmap] [BitmapSource] <:- [ColorConvertedBitmap] [BitmapSource] <:- [CroppedBitmap] [BitmapSource] <:- [FormatConvertedBitmap] [BitmapSource] <:- [RenderTargetBitmap] [BitmapSource] <:- [TransformedBitmap] [BitmapSource] <:- [WriteableBitmap] [Animatable] <:- [GeneralTransform] [GeneralTransform] <:- [GeneralTransformGroup] [GeneralTransform] <:- [Transform] [Transform] <:- [MatrixTransform] [Transform] <:- [RotateTransform] [Transform] <:- [ScaleTransform] [Transform] <:- [SkewTransform] [Transform] <:- [TranslateTransform] Animatable Camera ProjectionCamera PerspectiveCamera Geometry3D MeshGeometry3D Model3D Light DirectionalLight GeneralTransform3D Transform3D AffineTransform3D MatrixTransform3D Transform3DGroup RotateTransform3D ScaleTransform3D TranslateTransform3D GeneralTransform3DGroup Material MaterialGroup DiffuseMaterial EmissiveMaterial SpecularMaterial GeometryModel3D Model3DGroup OrthographicCamera PointLightBase SpotLight AmbientLight PointLight Brush TileBrush VisualBrush BitmapCacheBrush DrawingBrush ImageBrush Drawing Pen DrawingGroup GeometryDrawing GlyphRunDrawing ImageDrawing VideoDrawing ImageSource D3DImage DrawingImage BitmapSource BitmapImage InteropBitmap BitmapFrame CachedBitmap ColorConvertedBitmap CroppedBitmap FormatConvertedBitmap RenderTargetBitmap TransformedBitmap WriteableBitmap GeneralTransform GeneralTransformGroup Transform MatrixTransform RotateTransform ScaleTransform SkewTransform TranslateTransform


  • Brush

    Defines objects used to fill the interiors of graphical shapes such as rectangles, ellipses, pies, polygons, and paths.

  • Drawing

    Abstract class that describes a 2-D drawing. This class cannot be inherited by your code.

  • ImageSource

    Represents an object type that has a width, height, and ImageMetadata such as a BitmapSource and a DrawingImage. This is an abstract class.

  • BitmapSource

    Represents a single, constant set of pixels at a certain size and resolution.

  • Transform

    Defines functionality that enables transformations in a 2-D plane. Transformations include rotation (RotateTransform), scale (ScaleTransform), skew (SkewTransform), and translation (TranslateTransform). This class hierarchy differs from the Matrix structure because it is a class and it supports animation and enumeration semantics.

  • Material

    Abstract base class for materials. Materials provide texture to 3-D geometries. Combined with a light source, a material makes a 3-D surface visible in the scene.

  • Model3D

    Provides functionality for 3-D models. Use the ModelVisual3D class to render Model3D objects. You can compose Model3D objects by using a Model3DGroup to form a single model. You can share Model3D objects among ModelVisual3D objects to make multiple instances in a scene.

  • Geometry3D

    Classes that derive from this abstract base class define 3D geometric shapes. The Geometry3D class of objects can be used for hit-testing and rendering 3D graphic data.

#direction: right #spacing: 12 #.box: fill=#C06EF0 [<box>FrameworkElement] <:- [AccessText] [FrameworkElement] <:- [Popup] [FrameworkElement] <:- [TextBlock] [FrameworkElement] <:- [Decorator] <:- [Border] [FrameworkElement] <:- [Page] [FrameworkElement] <:- [Panel] [FrameworkElement] <:- [Viewport3D] [Decorator] <:- [BulletDecorator] [Decorator] <:- [Viewbox] [Panel] <:- [Canvas] [Panel] <:- [DockPanel] [Panel] <:- [Grid] [Panel] <:- [TabPanel] [Panel] <:- [ToolBarOverflowPanel] [Panel] <:- [UniformGrid] [Panel] <:- [StackPanel] [Panel] <:- [VirtualizingPanel] -[VirtualizingStackPanel] [Panel] <:- [WrapPanel] [VirtualizingPanel] <:- [DataGridCellsPanel] [FrameworkElement] <:- [Shape] <:- [Path] [Shape] <:- [Line] [Shape] <:- [Ellipse] [Shape] <:- [Polygon] [Shape] <:- [Polyline] [Shape] <:- [Rectangle] [FrameworkElement] <:- [MediaElement] [FrameworkElement] <:- [Image] [FrameworkElement] <:- [HwndHost] <:- [ActiveXHost] <:- [WebBrowser] [HwndHost] <:- [WindowsFormsHost] FrameworkElement AccessText Popup TextBlock Decorator Border Page Panel Viewport3D BulletDecorator Viewbox Canvas DockPanel Grid TabPanel ToolBarOverflowPanel UniformGrid StackPanel VirtualizingPanel VirtualizingStackPanel WrapPanel DataGridCellsPanel Shape Path Line Ellipse Polygon Polyline Rectangle MediaElement Image HwndHost ActiveXHost WebBrowser WindowsFormsHost

  • Decorator

    Provides a base class for elements that apply effects onto or around a single child element, such as Border or Viewbox.

  • Page

    Encapsulates a page of content that can be navigated to and hosted by Windows Internet Explorer, NavigationWindow, and Frame.

  • Panel

    Provides a base class for all Panel elements. Use Panel elements to position and arrange child objects in Windows Presentation Foundation (WPF) applications.

  • Shape

    • Canvas: Defines an area within which you can explicitly position child elements by using coordinates that are relative to the Canvas area.

    • DockPanel: Defines an area where you can arrange child elements either horizontally or vertically, relative to each other.

    • Grid: Defines a flexible grid area that consists of columns and rows.

    • TabPanel: Handles the layout of the TabItem objects on a TabControl.

    • ToolBarOverflowPanel: Used to arrange overflow ToolBar items.

    • UniformGrid: Provides a way to arrange content in a grid where all the cells in the grid have the same size.

    • StackPanel: Arranges child elements into a single line that can be oriented horizontally or vertically.

    • VirtualizingPanel: Provides a framework for Panel elements that virtualize their child data collection. This is an abstract class.

    • WrapPanel: Positions child elements in sequential position from left to right, breaking content to the next line at the edge of the containing box. Subsequent ordering happens sequentially from top to bottom or from right to left, depending on the value of the Orientation property.

  • MediaElement

    Represents a control that contains audio and/or video. When distributing media with your application, you cannot use a media file as a project resource. In your project file, you must instead set the media type to Content and set CopyToOutputDirectory to PreserveNewest or Always.

  • HwndHost

    Hosts a Win32 window as an element within Windows Presentation Foundation (WPF) content.

  • ContentControl

    Represents a control with a single piece of content of any type. The ContentControl can contain any type of common language runtime object (such as a string or a DateTime object) or a UIElement object (such as a Rectangle or a Panel).

  • ItemsControl

    Represents a control that can be used to present a collection of items. An ItemsControl is a type of Control that can contain multiple items, such as strings, objects, or other elements.

  • Selector

    Represents a control that allows a user to select items from among its child elements.

  • RangeBase

    Represents an element that has a value within a specific range.

#direction: right #spacing: 12 #.box: fill=#C06EF0 [ContentControl] <:- [ButtonBase] [ButtonBase] <:- [Button] [ButtonBase] <:- [RepeatButton] [ButtonBase] <:- [ToggleButton] [ToggleButton] <:- [RadioButton] [ToggleButton] <:- [CheckBox] [<box>Control] <:- [ContentControl] [ContentControl] <:- [HeaderedContentControl] <:- [Expander] [HeaderedContentControl] <:- [GroupBox] [ContentControl] <:- [ScrollViewer] [ContentControl] <:- [Window] <:- [NavigationWindow] [ContentControl] <:- [Frame] [ContentControl] <:- [Label] [ContentControl] <:- [ToolTip] [Control] <:- [ItemsControl] <:- [Selector] [Control] <:- [Thumb] <:- [GridSplitter] [Control] <:- [ResizeGrip] [Control] <:- [Separator] [Control] <:- [RangeBase] <:- [ScrollBar] [Control] <:- [TextBoxBase] [Control] <:- [DatePicker] [Control] <:- [Calendar] [TextBoxBase] <:- [TextBox] [TextBoxBase] <:- [RichTextBox] [Control] <:- [PasswordBox] [RangeBase] -[Slider] [RangeBase] <:- [ProgressBar] [Selector] <:- [TabControl] [Selector] <:- [MultiSelector] <:- [DataGrid] [Selector] <:- [ListBox] <:- [ListView] [Selector] <:- [ComboBox] [ItemsControl] <:- [StatusBar] [ItemsControl] <:- [TreeView] [ItemsControl] <:- [HeaderedItemsControl] <:- [ToolBar] [ItemsControl] <:- [MenuBase] <:- [ContextMenu] [MenuBase] <:- [Menu] [Control] <:- [DocumentViewerBase] <:- [DocumentViewer] [DocumentViewerBase] <:-[FlowDocumentPageViewer] [Control] <:- [FlowDocumentReader] [Control] <:- [FlowDocumentScrollViewer] [Control] <:- [StickyNoteControl] ContentControl ButtonBase Button RepeatButton ToggleButton RadioButton CheckBox Control HeaderedContentControl Expander GroupBox ScrollViewer Window NavigationWindow Frame Label ToolTip ItemsControl Selector Thumb GridSplitter ResizeGrip Separator RangeBase ScrollBar TextBoxBase DatePicker Calendar TextBox RichTextBox PasswordBox Slider ProgressBar TabControl MultiSelector DataGrid ListBox ListView ComboBox StatusBar TreeView HeaderedItemsControl ToolBar MenuBase ContextMenu Menu DocumentViewerBase DocumentViewer FlowDocumentPageViewer FlowDocumentReader FlowDocumentScrollViewer StickyNoteControl

Windows Froms class hierarchy

#direction: right #spacing: 12 #.box: fill=#C06EF0 [IDisposable] <:-- [<box>Component] [Object] <:- [MarshalByRefObject] <:- [Component] [MarshalByRefObject] <:- [Brush] [MarshalByRefObject] <:- [Font] [MarshalByRefObject] <:- [FontFamily] [MarshalByRefObject] <:- [Graphics] [MarshalByRefObject] <:- [Icon] [MarshalByRefObject] <:- [Image] [MarshalByRefObject] <:- [Pen] [MarshalByRefObject] <:- [Region] [MarshalByRefObject] <:- [NativeWindow] [MarshalByRefObject] <:- [NumericUpDownAccelerationCollection] [MarshalByRefObject] <:- [OwnerDrawPropertyBag] [MarshalByRefObject] <:- [TreeNode] IDisposable Component Object MarshalByRefObject Brush Font FontFamily Graphics Icon Image Pen Region NativeWindow NumericUpDownAccelerationCollection OwnerDrawPropertyBag TreeNode

  • MarshalByRefObject

    Enables access to objects across application domain boundaries in applications that support remoting.

  • Component

    Provides the base implementation for the IComponent interface and enables object sharing between applications. Component is the base class for all components in the common language runtime that marshal by reference. Component is remotable and derives from the MarshalByRefObject class. Component provides an implementation of the IComponent interface. The MarshalByValueComponent provides an implementation of IComponent that marshals by value.

  • NativeWindow

    Provides a low-level encapsulation of a window handle and a window procedure. This class automatically manages window class creation and registration. A window is not eligible for garbage collection when it is associated with a window handle. To ensure proper garbage collection, handles must either be destroyed manually using DestroyHandle or released using ReleaseHandle.

#direction: right #spacing: 12 #.box: fill=#C06EF0 [<box>Component] <:- [BindingSource] [Component] <:- [CommonDialog] [CommonDialog] <:- [ColorDialog] [CommonDialog] <:- [FileDialog] [FileDialog] <:- [OpenFileDialog] [FileDialog] <:- [SaveFileDialog] [CommonDialog] <:- [FolderBrowserDialog] [CommonDialog] <:- [FontDialog] [CommonDialog] <:- [PageSetupDialog] [CommonDialog] <:- [PrintDialog] [Component] <:- [BindableComponent] <:- [ToolStripItem] [Component] <:- [Menu] [Menu] <:- [CiontextMenu] [Menu] <:- [MainMenu] [Menu] <:- [MenuItem] [Component] <:- [DataGridColumnStyle] [DataGridColumnStyle] <:- [DataGridBoolColumn] [DataGridColumnStyle] <:- [DataGridTextBoxColumn] [ToolStripItem] <:- [ToolStripButton] [ToolStripItem] <:- [ToolStripControlHost] [ToolStripItem] <:- [ToolStripDropDownItem] [ToolStripItem] <:- [ToolStripLabel] <:- [ToolStripStatusLabel] [ToolStripItem] <:- [ToolStripSeparator] [ToolStripControlHost] <:- [ToolStripComboBox] [ToolStripControlHost] <:- [ToolStripProgressBar] [ToolStripControlHost] <:- [ToolStripTextBox] [ToolStripDropDownItem] <:- [ToolStripDropDownButton] [ToolStripDropDownItem] <:- [ToolStripMenuItem] [ToolStripDropDownItem] <:- [ToolStripSplitButton] [Component] <:- [DataGridTableStyle] [Component] <:- [HelpProvider] [Component] <:- [ImageList] [Component] <:- [NotifyIcon] [Component] <:- [StatusBarPanel] [Component] <:- [Timer] [Component] <:- [<box>Control] Component BindingSource CommonDialog ColorDialog FileDialog OpenFileDialog SaveFileDialog FolderBrowserDialog FontDialog PageSetupDialog PrintDialog BindableComponent ToolStripItem Menu CiontextMenu MainMenu MenuItem DataGridColumnStyle DataGridBoolColumn DataGridTextBoxColumn ToolStripButton ToolStripControlHost ToolStripDropDownItem ToolStripLabel ToolStripStatusLabel ToolStripSeparator ToolStripComboBox ToolStripProgressBar ToolStripTextBox ToolStripDropDownButton ToolStripMenuItem ToolStripSplitButton DataGridTableStyle HelpProvider ImageList NotifyIcon StatusBarPanel Timer Control

  • BindableComponent

    Base class for components that provide properties that can be data bound with the Windows Forms Designer.

  • ToolStripItem

    Represents the abstract base class that manages events and layout for all the elements that a ToolStrip or ToolStripDropDown can contain.

  • CommonDialog

    Specifies the base class used for displaying dialog boxes on the screen. Inherited classes are required to implement RunDialog by invoking ShowDialog to create a specific common dialog box. Inherited classes can optionally override HookProc to implement specific dialog box hook functionality.

  • Control

    Defines the base class for controls, which are components with visual representation. The Control class implements very basic functionality required by classes that display information to the user. It handles user input through the keyboard and pointing devices. It handles message routing and security. It defines the bounds of a control (its position and size), although it does not implement painting. It provides a window handle (hWnd).

#direction: right #spacing: 12 #.box: fill=#C06EF0 [<box>Control] <:- [TabControl] [Control] <:- [ToolBar] [Control] <:- [TrackBar] [Control] <:- [TreeView] [Control] <:- [AxHost] [Control] <:- [DataGridView] [Control] <:- [Chart] [Control] <:- [DateTimePicker] [Control] <:- [GroupBox] [Control] <:- [ElementHost] [Control] <:- [ListView] [Control] <:- [MdiClient] [Control] <:- [MonthCalendar] [Control] <:- [PictureBox] [Control] <:- [PrintPreviewControl] [Control] <:- [ProgressBar] Control TabControl ToolBar TrackBar TreeView AxHost DataGridView Chart DateTimePicker GroupBox ElementHost ListView MdiClient MonthCalendar PictureBox PrintPreviewControl ProgressBar

  • AxHost

    Wraps ActiveX controls and exposes them as fully featured Windows Forms controls.

  • MdiClient

    Represents the container for multiple-document interface (MDI) child forms. This class cannot be inherited.

  • ElementHost

    A Windows Forms control that can be used to host a Windows Presentation Foundation (WPF) element.

  • ScrollableControl

    Defines a base class for controls that support auto-scrolling behavior. To enable a control to display scroll bars as needed, set the AutoScroll property to true and set the AutoScrollMinSize property to the desired size. When the control is sized smaller than the specified minimum size, or a child control is located outside the bounds of the control, the appropriate scroll bars are displayed.

  • ContainerControl

    Provides focus-management functionality for controls that can function as a container for other controls. The container control can capture the TAB key press and move focus to the next control in the collection.

  • Panel

    Used to group collections of controls. You can use a Panel to group collections of controls such as a group of RadioButton controls. As with other container controls such as the GroupBox control, if the Panel control's Enabled property is set to false, the controls contained within the Panel will also be disabled.

  • ThreadExceptionDialog

    Implements a dialog box that is displayed when an unhandled exception occurs in a thread. This API supports the product infrastructure and is not intended to be used directly from your code.

  • UserControl

    The UserControl gives you the ability to create controls that can be used in multiple places within an application or organization. You can include all the code needed for validation of common data you ask the user to input.

#direction: right #spacing: 10 #.box: fill=#C06EF0 [<box>Control] <:- [ScrollableControl] [Control] <:- [ButtonBase] [Control] <:- [Label] <:- [LinkLabel] [ButtonBase] -[Button] [ButtonBase] -[CheckBox] [ButtonBase] -[RadioButton] [TextBox] <:- [DataGridTextBox] [TextBox] <:- [DataGridViewTextBoxEditingControl] [ScrollableControl] <:- [ContainerControl] [ScrollableControl] <:- [ComponentTray] [ScrollableControl] <:- [Panel] [ScrollableControl] <:- [ToolStrip] [ToolStrip] <:- [ToolStripDropDown] [ToolStripDropDown] <:- [ToolStripDropDownMenu] <:- [ContextMenuStrip] [ToolStripDropDown] <:- [ToolStripOverflow] [ToolStrip] <:- [BindingNavigator] [ToolStrip] <:- [MenuStrip] [ToolStrip] <:- [StatusStrip] [ContainerControl] <:- [Form] <:- [PrintPreviewDialog] [Form] <:- [ThreadExceptionDialog] [ContainerControl] <:- [PropertyGrid] [ContainerControl] <:- [SplitContainer] [ContainerControl] <:- [ToolStripContainer] [ContainerControl] <:- [ToolStripPanel] [ContainerControl] <:- [UpDownBase] <:- [DomainUpDown] [UpDownBase] <:- [NumericUpDown] [ContainerControl] <:- [UserControl] [Control] <:- [ListControl] <:- [ComboBox] <:- [DataGridViewComboBoxEditingControl] [ListControl] <:- [ListBox] <:- [CheckedListBox] [Control] <:- [TextBoxBase] [TextBoxBase] <:- [MaskedTextBox] [TextBoxBase] <:- [RichTextBox] [TextBoxBase] <:- [TextBox] [ScrollBar] <:- [VScrollBar] [Control] <:- [Splitter] [Control] <:- [StatusBar] [Control] <:- [WebBrowserBase] <:- [WebBrowser] [Panel] <:- [ComponentEditorPage] [Panel] <:- [FlowLayoutPanel] [Panel] <:- [SplitterPanel] [Panel] <:- [TableLayoutPanel] <:- [ByteViewer] [Panel] <:- [TabPage] [Panel] <:- [ToolStripContentPanel] [Control] <:- [ScrollBar] <:- [HScrollBar] Control ScrollableControl ButtonBase Label LinkLabel Button CheckBox RadioButton TextBox DataGridTextBox DataGridViewTextBoxEditingControl ContainerControl ComponentTray Panel ToolStrip ToolStripDropDown ToolStripDropDownMenu ContextMenuStrip ToolStripOverflow BindingNavigator MenuStrip StatusStrip Form PrintPreviewDialog ThreadExceptionDialog PropertyGrid SplitContainer ToolStripContainer ToolStripPanel UpDownBase DomainUpDown NumericUpDown UserControl ListControl ComboBox DataGridViewComboBoxEditingControl ListBox CheckedListBox TextBoxBase MaskedTextBox RichTextBox ScrollBar VScrollBar Splitter StatusBar WebBrowserBase WebBrowser ComponentEditorPage FlowLayoutPanel SplitterPanel TableLayoutPanel ByteViewer TabPage ToolStripContentPanel HScrollBar

MAUI class hierarchy

#direction: right #spacing: 12 #.box: fill=#C06EF0 [BindableObject] <:- [StateTriggerBase] [StateTriggerBase] <:- [AdaptiveTrigger] [StateTriggerBase] <:- [CompareStateTrigger] [StateTriggerBase] <:- [DeviceStateTrigger] [StateTriggerBase] <:- [SpanModeStateTrigger] [StateTriggerBase] <:- [WindowSpanModeStateTrigger] [BindableObject] <:- [TriggerBase] [TriggerBase] <:- [DataTrigger] [TriggerBase] <:- [EventTrigger] [TriggerBase] <:- [MultiTrigger] [TriggerBase] <:- [Trigger] [BindableObject] <:- [<box>Elelement] [BindableObject] <:- [BackButtonBehavior] [BindableObject] <:- [ColumnDefinition] [BindableObject] <:- [ItemsLayout] [ItemsLayout] <:- [GridItemsLayout] [ItemsLayout] <:- [LinearItemsLayout] [BindableObject] <:- [Behavior] <:- [Behavior\<T\>] <:- [PlatformBehavior \<TView,TPlatformView\>] <:- [PlatformBehavior\<TView\>] [BindableObject] <:- [WebViewSource] [WebViewSource] <:- [HtmlWebViewSource] [WebViewSource] <:- [UrlWebViewSource] [BindableObject] <:- [KeyboardAccelerator] [BindableObject] <:- [RowDefinition] [BindableObject] <:- [SearchHandler] [BindableObject] <:- [PathFigure] [BindableObject] <:- [TableSectionBase] [BindableObject] <:- [Geometry] [Geometry] <:- [EllipseGeometry] [Geometry] <:- [GeometryGroup] [Geometry] <:- [LineGeometry] [Geometry] <:- [PathGeometry] [Geometry] <:- [RectangleGeometry] [BindableObject] <:- [PathSegment] [PathSegment] <:- [ArcSegment] [PathSegment] <:- [BezierSegment] [PathSegment] <:- [LineSegment] [PathSegment] <:- [PolyBezierSegment] [PathSegment] <:- [PolyLineSegment ] [PathSegment] <:- [PolyQuadraticBezierSegment] [PathSegment] <:- [QuadraticBezierSegment] [BindableObject] <:- [Transform] [Transform] <:- [CompositeTransform] [Transform] <:- [MatrixTransform] [Transform] <:- [RotateTransform] [Transform] <:- [ScaleTransform] [Transform] <:- [SkewTransform] [Transform] <:- [TransformGroup] [Transform] <:- [TranslateTransform] BindableObject StateTriggerBase AdaptiveTrigger CompareStateTrigger DeviceStateTrigger SpanModeStateTrigger WindowSpanModeStateTrigger TriggerBase DataTrigger EventTrigger MultiTrigger Trigger Elelement BackButtonBehavior ColumnDefinition ItemsLayout GridItemsLayout LinearItemsLayout Behavior Behavior<T> PlatformBehavior <TView,TPlatformView> PlatformBehavior<TView> WebViewSource HtmlWebViewSource UrlWebViewSource KeyboardAccelerator RowDefinition SearchHandler PathFigure TableSectionBase Geometry EllipseGeometry GeometryGroup LineGeometry PathGeometry RectangleGeometry PathSegment ArcSegment BezierSegment LineSegment PolyBezierSegment PolyLineSegment PolyQuadraticBezierSegment QuadraticBezierSegment Transform CompositeTransform MatrixTransform RotateTransform ScaleTransform SkewTransform TransformGroup TranslateTransform

#direction: right #spacing: 12 #.box: fill=#C06EF0 [Element] <:- [Application] [Element] <:- [AppLinkEntry] [Element] <:- [BaseMenuItem] [Element] <:- [Brush] [Brush] <:- [GradientBrush] [GradientBrush] <:- [LinearGradientBrush] [GradientBrush] <:- [RadialGradientBrush] [Brush] <:- [SolidColorBrush] [Element] <:- [FlyoutBase] <:- [MenuFlyout] [Element] <:- [FormattedString] [Element] <:- [GestureElement] <:- [Span] [Element] <:- [GestureRecognizer] [GestureRecognizer] <:-[DragGestureRecognizer] [GestureRecognizer] <:-[DropGestureRecognizer] [GestureRecognizer] <:-[PanGestureRecognizer] [GestureRecognizer] <:-[PinchGestureRecognizer] [GestureRecognizer] <:-[PointerGestureRecognizer] [GestureRecognizer] <:-[SwipeGestureRecognizer] [GestureRecognizer] <:-[TapGestureRecognizer] [Element] <:- [GradientStop] [Element] <:- [ImageSource] [ImageSource] <:- [FileImageSource] [ImageSource] <:- [FontImageSource] [ImageSource] <:- [StreamImageSource] [ImageSource] <:- [UriImageSource] [Element] <:- [MapElement] [MapElement] <:- [Circle] [MapElement] <:- [Polygon] [MapElement] <:- [Polyline] [Element] <:- [Pin] [Element] <:- [MenuBar] [Element] <:- [Shadow] [Element] <:- [SwipeItems] [Element] <:- [<box>NavigableElement] [Element] <:-[BaseMenuItem] <:- [MenuBarItem] [BaseMenuItem] <:- [MenuItem] [MenuItem] <:- [MenuFlyoutItem] [MenuFlyoutItem] <:- [MenuFlyoutSeparator] [MenuFlyoutItem] <:- [MenuFlyoutSubItem] [MenuItem] <:- [SwipeItem] [MenuItem] <:- [ToolbarItem] [Element] <:- [Cell] [Cell] <:- [EntryCell] [Cell] <:- [SwitchCell] [Cell] <:- [TextCell] [Cell] <:- [ViewCell] [Element] <:- [<box>NavigableElement] Element Application AppLinkEntry BaseMenuItem Brush GradientBrush LinearGradientBrush RadialGradientBrush SolidColorBrush FlyoutBase MenuFlyout FormattedString GestureElement Span GestureRecognizer DragGestureRecognizer DropGestureRecognizer PanGestureRecognizer PinchGestureRecognizer PointerGestureRecognizer SwipeGestureRecognizer TapGestureRecognizer GradientStop ImageSource FileImageSource FontImageSource StreamImageSource UriImageSource MapElement Circle Polygon Polyline Pin MenuBar Shadow SwipeItems NavigableElement MenuBarItem MenuItem MenuFlyoutItem MenuFlyoutSeparator MenuFlyoutSubItem SwipeItem ToolbarItem Cell EntryCell SwitchCell TextCell ViewCell

#direction: right #spacing: 12 #.box: fill=#C06EF0 [NavigableElement] <:- [Window] [NavigableElement] <:- [BaseShellItem] [BaseShellItem] <:- [ShellContent] [BaseShellItem] <:- [ShellGroupItem] [ShellGroupItem] <:- [ShellItem] [ShellItem] <:- [FlyoutItem] [ShellItem] <:- [TabBar] [ShellGroupItem] <:- [ShellSection] [NavigableElement] <:- [VisualElement] [VisualElement] <:- [Page] [Page] <:- [FlyoutPage] [Page] <:- [MultiPage\<T\>] [Page] <:- [NavigationPage] [Page] <:- [Shell] [Page] <:- [TemplatedPage] [VisualElement] <:- [<box id=b>View] [<box>View] <:- [BlazorWebView] [View] <:- [ActivityIndicator] [View] <:- [Border] [View] <:- [BoxView] [View] <:- [Button] [View] <:- [CheckBox] [View] <:- [DatePicker] [View] <:- [GraphicsView] [View] <:- [Image] [View] <:- [ImageButton] [View] <:- [InputView] [InputView] <:-[Editor] [InputView] <:-[Entry] [InputView] <:-[SearchBar] [View] <:- [ItemsView] [ItemsView] <:- [CarouselView] [ItemsView] <:- [StructuredItemsView] <:- [SelectableItemsView] [SelectableItemsView] <:- [GroupableItemsView] [GroupableItemsView] <:- [ReorderableItemsView] [View] <:- [ItemsView\<TVisual\>] <:- [ListView] [View] <:- [Layout] [Layout] <:- [AbsoluteLayout] [Layout] <:- [FlexLayout] [Layout] <:- [Grid] [Layout] <:- [StackBase] [StackBase] <:- [HorizontalStackLayout] [StackBase] <:- [StackLayout] [StackBase] <:- [VerticalStackLayout] [View] <:- [Label] [View] <:- [Picker] [View] <:- [ProgressBar] [View] <:- [Shape] [Shape] <:-[Ellipse] [Shape] <:-[Line] [Shape] <:-[Path] [Shape] <:-[Polygon] [Shape] <:-[Polyline] [Shape] <:-[Rectangle] [Shape] <:-[RoundRectangle] [View] <:- [Slider] [View] <:- [Stepper] [View] <:- [Switch] [View] <:- [TableView] [View] <:- [TimePicker] [View] <:- [WebView] NavigableElement Window BaseShellItem ShellContent ShellGroupItem ShellItem FlyoutItem TabBar ShellSection VisualElement Page FlyoutPage MultiPage<T> NavigationPage Shell TemplatedPage View View BlazorWebView ActivityIndicator Border BoxView Button CheckBox DatePicker GraphicsView Image ImageButton InputView Editor Entry SearchBar ItemsView CarouselView StructuredItemsView SelectableItemsView GroupableItemsView ReorderableItemsView ItemsView<TVisual> ListView Layout AbsoluteLayout FlexLayout Grid StackBase HorizontalStackLayout StackLayout VerticalStackLayout Label Picker ProgressBar Shape Ellipse Line Path Polygon Polyline Rectangle RoundRectangle Slider Stepper Switch TableView TimePicker WebView