A comprehensive set of modern, enterprise-ready WPF libraries for building professional desktop applications with the MVVM design pattern. This framework provides a rich collection of reusable controls, theming support, font icons, and MVVM infrastructure to accelerate WPF application development.
- π¨ Rich Control Library - 80+ controls including labeled form controls, flyouts, color pickers, selectors, and specialized input controls
- ποΈ Four-Tier Architecture - Clear separation: Base β Controls β Forms β Components
- π Light/Dark Theming - Built-in theme support for all controls with easy customization
- π― MVVM Ready - Complete MVVM infrastructure with observable properties and relay commands
- π€ Font Icon Support - Render SVG and image resources based on fonts
- β Smart Validation - Deferred validation pattern for better user experience
- π Advanced Layouts - FlexPanel, AutoGrid, StaggeredPanel, Card, Badge and more
- π Localization - Built-in translation and localization support
- π Value Converters - Extensive collection of XAML value converters
- .NET 10 - Desktop Runtime
- Windows 10 or later
The demonstration application, Atc.Wpf.Sample, functions as a control explorer.
It provides quick visualization of a given control, along with options for
copying and pasting the XAML markup and/or the C# code for how to use it.
The following example is taken from the ReplayCommandAsync which illustrates its usage:
- The
Sampletab shows how to use the control or feature. - The
XAMLtab displays the corresponding XAML markup. - The
CodeBehindtab reveals the underlying code-behind. - The
ViewModeltab displays the associated ViewModel, if used. - The
Readmetab displays the associated [control]_Readme.md, if exist.
Sample ![]() |
XAML ![]() |
CodeBehind ![]() |
ViewModel ![]() |
| Light-Mode | Dark-Mode |
|---|---|
Wpf - AutoGrid ![]() |
Wpf - AutoGrid ![]() |
Wpf.Controls - Label MIX ![]() |
Wpf.Controls - Label MIX ![]() |
Wpf.Theming - ImageButton ![]() |
Wpf.Theming - ImageButton ![]() |
| Wpf.FontIcons - Viewer |
Wpf.FontIcons - Viewer |
Add the NuGet packages to your .csproj file:
<ItemGroup>
<!-- Core packages -->
<PackageReference Include="Atc.Wpf" Version="4.*" />
<PackageReference Include="Atc.Wpf.Theming" Version="4.*" />
<!-- For form controls (LabelTextBox, LabelComboBox, etc.) -->
<PackageReference Include="Atc.Wpf.Forms" Version="4.*" />
<!-- For composite components (dialogs, viewers) -->
<PackageReference Include="Atc.Wpf.Components" Version="4.*" />
<!-- Optional: Font icons -->
<PackageReference Include="Atc.Wpf.FontIcons" Version="4.*" />
</ItemGroup>Add the required resource dictionaries to enable theming and control styles:
<Application
x:Class="YourApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:atc="https://github.com/atc-net/atc-wpf/tree/main/schemas">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<!-- Base theming styles for Light/Dark mode -->
<ResourceDictionary Source="pack://application:,,,/Atc.Wpf.Theming;component/Styles/Default.xaml" />
<!-- Control library styles -->
<ResourceDictionary Source="pack://application:,,,/Atc.Wpf.Controls;component/Styles/Controls.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>Now you can use all controls with full theming support:
<Window
xmlns:atc="https://github.com/atc-net/atc-wpf/tree/main/schemas"
...>
<!-- Labeled controls with validation -->
<atc:LabelTextBox
LabelText="User Name"
Text="{Binding UserName}"
IsMandatory="True" />
<!-- Network endpoint input -->
<atc:LabelEndpointBox
LabelText="API Endpoint"
NetworkProtocol="Https"
Value="{Binding EndpointUri}" />
<!-- Standard WPF controls automatically themed -->
<Button Content="Save" Command="{Binding SaveCommand}" />
<TextBox Text="{Binding Notes}" />
</Window>All standard WPF controls (Button, TextBox, ComboBox, etc.) are automatically styled with Light/Dark theme support.
Understanding the package hierarchy and when to use each:
| Tier | Package | Purpose | Example Controls |
|---|---|---|---|
| 1. Base | Atc.Wpf |
MVVM, layouts, converters - no UI controls | ViewModelBase, GridEx, FlexPanel |
| 2. Controls | Atc.Wpf.Controls |
Atomic/primitive controls | IntegerBox, ToggleSwitch, Flyout, Carousel |
| 3. Forms | Atc.Wpf.Forms |
Labeled form fields with validation | LabelTextBox, LabelComboBox, LabelDatePicker |
| 4. Components | Atc.Wpf.Components |
Composite high-level components | InfoDialogBox, JsonViewer, ToastNotification |
Quick Guidelines:
- Use Form Controls (
Atc.Wpf.Forms) for standard forms - they include labels, validation, and mandatory indicators - Use Base Controls (
Atc.Wpf.Controls) when you need custom layouts or are building composite controls - Use Components (
Atc.Wpf.Components) for dialogs, viewers, and settings panels
A quick reference of all controls organized by category:
| Category | Controls | Package |
|---|---|---|
| Layout Panels | GridEx, AutoGrid, FlexPanel, StaggeredPanel, UniformSpacingPanel, ResponsivePanel, DockPanelPro | Atc.Wpf / Atc.Wpf.Controls |
| Data Display | Card, Badge, Chip, Avatar, AvatarGroup, Divider, Carousel, Rating | Atc.Wpf.Controls |
| Flyouts | Flyout, FlyoutHost, FlyoutService | Atc.Wpf.Controls |
| Input Controls | NumericBox, IntegerBox, DecimalBox, ToggleSwitch, RangeSlider, FilePicker, DirectoryPicker | Atc.Wpf.Controls |
| Color Controls | HueSlider, SaturationBrightnessPicker, TransparencySlider, WellKnownColorPicker | Atc.Wpf.Controls |
| Buttons | ImageButton, AuthenticationButton, ConnectivityButton | Atc.Wpf.Controls |
| Progress | BusyOverlay, LoadingIndicator | Atc.Wpf.Controls |
| Labeled Form Controls | LabelTextBox, LabelIntegerBox, LabelComboBox, LabelDatePicker, LabelColorPicker, + 20 more | Atc.Wpf.Forms |
| Dialogs | InfoDialogBox, QuestionDialogBox, InputDialogBox, ColorPickerDialogBox | Atc.Wpf.Forms / Components |
| Viewers | JsonViewer, TerminalViewer | Atc.Wpf.Components |
| Notifications | ToastNotification, ToastNotificationManager | Atc.Wpf.Components |
| Theming | NiceWindow, ThemeSelector, AccentColorSelector | Atc.Wpf.Theming |
| Font Icons | FontAwesome (3 variants), Bootstrap, MaterialDesign, Weather, IcoFont | Atc.Wpf.FontIcons |
| Network | NetworkScannerView | Atc.Wpf.Network |
For MVVM infrastructure, add the Atc.XamlToolkit package to your project. This provides powerful source generators and base classes for clean MVVM architecture.
Note: As of version 4.x,
Atc.Wpfno longer directly depends onAtc.XamlToolkitto optimize build performance. AddAtc.XamlToolkitdirectly to your project to use source generators and MVVM base classes.
- Observable Properties - Automatic
INotifyPropertyChangedimplementation via[ObservableProperty]attribute - Relay Commands - Simple command implementation with
CanExecutesupport via[RelayCommand]attribute - Async Commands - Built-in support for async/await patterns
- Source Generators - Automatic code generation for ViewModels, DependencyProperties, and AttachedProperties
| Component | Source | Description |
|---|---|---|
ViewModelBase |
Atc.XamlToolkit.Mvvm | Base class for ViewModels |
ObservableObject |
Atc.XamlToolkit.Mvvm | Base class implementing INotifyPropertyChanged |
RelayCommand<T> |
Atc.XamlToolkit.Command | Command with CanExecute support |
RelayCommandAsync<T> |
Atc.XamlToolkit.Command | Async command with CanExecute support |
[ObservableProperty] |
Atc.XamlToolkit | Source generator for properties |
[RelayCommand] |
Atc.XamlToolkit | Source generator for commands |
[DependencyProperty] |
Atc.XamlToolkit.Wpf | Source generator for WPF dependency properties |
[AttachedProperty] |
Atc.XamlToolkit.Wpf | Source generator for WPF attached properties |
public partial class MainViewModel : ViewModelBase
{
[ObservableProperty]
private string userName = string.Empty;
[ObservableProperty]
private bool isEnabled = true;
[RelayCommand(CanExecute = nameof(CanSave))]
private async Task SaveAsync()
{
await SaveUserDataAsync(UserName);
}
private bool CanSave() => !string.IsNullOrEmpty(UserName);
}Note: While this README provides an overview, the best way to explore all controls and components is to run the
Atc.Wpf.Sampleapplication, which includes interactive examples with XAML and code-behind for every control! οΏ½
The foundation library providing essential WPF controls, layouts, and utilities.
Modern layout panels and containers for advanced UI composition. See the complete Layout Controls documentation for detailed usage.
| Control | Description | Key Features | Documentation |
|---|---|---|---|
| GridEx | Enhanced Grid | String-based row/column definitions | Readme |
| AutoGrid | Auto-indexed Grid | Automatic child positioning | Readme |
| FlexPanel | CSS Flexbox panel | Grow/shrink, justify, align | Readme |
| StaggeredPanel | Masonry layout | Pinterest-style waterfall | Readme |
| UniformSpacingPanel | Uniform spacing | Consistent gaps + wrapping | Readme |
| ResponsivePanel | Responsive layout | Breakpoint-based responsive design | Readme |
| DockPanelPro | IDE-style docking | Resizable regions | Readme |
| Control | Description | Key Features | Documentation |
|---|---|---|---|
| Card | Content container | Elevation, header/footer, expand | Readme |
| Badge | Status indicator | Notification counts, dots | Readme |
| Chip | Tag/filter control | Selectable, removable | Readme |
| Avatar | User profile picture | Initials fallback, status indicator | Readme |
| Divider | Visual separator | Horizontal/vertical | Readme |
- SvgImage - SVG image rendering control
- PanelHelper - Helper methods for panel layout calculations
- ShaderEffects - HLSL-based visual effects
- Translation & Localization - Multi-language support
- ValueConverters - Collection of XAML value converters
A collection of primitive/atomic WPF controls - single-purpose building blocks.
Unlabeled input controls that provide core functionality:
| Category | Controls |
|---|---|
| Number Input | NumericBox, IntegerBox, DecimalBox, IntegerXyBox, DecimalXyBox, PixelSizeBox |
| Toggle & Slider | ToggleSwitch, RangeSlider, Rating |
| Pickers | DirectoryPicker, FilePicker |
| Text Input | RichTextBoxEx |
- AuthenticationButton, ConnectivityButton, ImageButton, ImageToggledButton
- HueSlider, SaturationBrightnessPicker, TransparencySlider, WellKnownColorPicker
- DockPanelPro, GridLines, GroupBoxExpander
| Control | Description | Documentation |
|---|---|---|
| Avatar | User profile pictures with initials fallback | Readme |
| AvatarGroup | Multiple overlapping avatars | - |
| Badge | Status indicator overlay | - |
| Card | Elevated container with header/footer | - |
| Carousel | Image carousel/slideshow with navigation | Readme |
| Chip | Tag/filter interactive elements | - |
| Divider | Visual separator (horizontal/vertical) | - |
Sliding panel overlays that slide in from window edges - inspired by Azure Portal blade pattern.
| Control | Description | Documentation |
|---|---|---|
| Flyout | Sliding panel overlay from edges (Right, Left, Top, Bottom) | Readme |
| FlyoutHost | Container that manages multiple flyouts with nesting support | Readme |
| FlyoutService | MVVM-friendly service for programmatic flyout management | Readme |
Key Features:
- π― Four positions: Right (default), Left, Top, Bottom
- π Light dismiss (click outside or Escape key)
- π Nested flyouts (Azure Portal drill-down style)
- π¬ Smooth slide animations
- π¨ Full theming support
<!-- Basic Flyout -->
<flyouts:Flyout x:Name="SettingsFlyout" Header="Settings" FlyoutWidth="400">
<StackPanel Margin="16">
<CheckBox Content="Enable notifications" />
<CheckBox Content="Dark mode" />
</StackPanel>
</flyouts:Flyout>- BusyOverlay, LoadingIndicator
Form field components with labels, validation, and mandatory indicators for building data entry forms.
Labeled input controls with built-in validation and consistent styling:
- Text Input: LabelTextBox, LabelPasswordBox
- Number Input: LabelIntegerBox, LabelDecimalBox, LabelIntegerXyBox, LabelDecimalXyBox, LabelPixelSizeBox
- Date/Time: LabelDatePicker, LabelTimePicker, LabelDateTimePicker
- Selection: LabelCheckBox, LabelComboBox, LabelToggleSwitch, LabelSlider
- Selectors: LabelAccentColorSelector, LabelCountrySelector, LabelFontFamilySelector, LabelLanguageSelector, LabelThemeSelector, LabelWellKnownColorSelector
- Pickers: LabelColorPicker, LabelDirectoryPicker, LabelFilePicker
- Network: LabelEndpointBox (protocol + host + port with validation)
- Display: LabelContent, LabelTextInfo
All label controls support:
- β Deferred validation (shows errors only after user interaction)
- β Mandatory field indicators
- β Consistent styling and theming
- β MVVM-friendly data binding
- Abstractions: ILabelControl, ILabelControlsForm
- Extractors: Form data extraction utilities
- Factories: LabelControlFactory, LabelControlsFormFactory
- Writers: Form rendering utilities
Higher-level composite components combining multiple controls for business-ready UI.
- InfoDialogBox, QuestionDialogBox, InputDialogBox, InputFormDialogBox, BasicApplicationSettingsDialogBox
- DialogService - MVVM-friendly dialog management
Note: ColorPickerDialogBox is located in Atc.Wpf.Forms.Dialogs
- JsonViewer - JSON document viewer with syntax highlighting
- TerminalViewer - Terminal/console output viewer
- ApplicationMonitorView - Application event monitoring component
- ToastNotificationManager, ToastNotificationArea, ToastNotification - Toast notification system
- BasicApplicationSettingsView, BasicApplicationSettingsViewModel
Render SVG and image resources using font-based icon systems for crisp, scalable icons.
- π¨ Scalable vector icons
- π― Font-based rendering
- π¦ Multiple icon font support
- π Color and size customization
- ValueConverters - Icon-related value converters
Complete theming infrastructure with Light and Dark mode support for all WPF controls.
- π Light/Dark theme switching
- π¨ Accent color customization
- π― Automatic control styling
- π Runtime theme changes
- π± Consistent visual design
- ValueConverters - Theme-aware value converters
Specialized controls for network scanning and host discovery, built on the Atc.Network library.
A comprehensive network scanner control that displays scan results in a sortable, filterable ListView.
Features:
- π IP range scanning with configurable start/end addresses
- π Real-time progress reporting with cancellation support
- π Displays IP address, hostname, MAC address, and vendor information
- πͺ Port scanning with configurable port lists
- πΆ Network quality indicators (ping status visualization)
- π Sortable columns with click-to-sort headers
- ποΈ Configurable column visibility
- π Built-in filtering (show only successful pings, show only hosts with open ports)
- π Localization support (English, Danish, German)
Usage:
<Window xmlns:atcNetwork="clr-namespace:Atc.Wpf.Network;assembly=Atc.Wpf.Network">
<atcNetwork:NetworkScannerView DataContext="{Binding NetworkScannerVm}" />
</Window>// ViewModel setup
var viewModel = new NetworkScannerViewModel
{
StartIpAddress = "192.168.1.1",
EndIpAddress = "192.168.1.254",
PortsNumbers = [80, 443, 22, 3389]
};
// Start scanning
await viewModel.ScanCommand.ExecuteAsync(null);
// Handle selection changes
viewModel.EntrySelected += (sender, args) =>
{
var selectedHost = args.NetworkHost;
// Handle selected host
};ViewModels:
NetworkScannerViewModel- Main ViewModel for the scanner controlNetworkHostViewModel- Represents a discovered network hostNetworkScannerColumnsViewModel- Controls column visibilityNetworkScannerFilterViewModel- Controls result filtering
Atc.Wpf includes powerful source generators from Atc.XamlToolkit to reduce boilerplate code:
- ViewModel Generator - Auto-generate ViewModels with
[ObservableProperty]and[RelayCommand] - DependencyProperty Generator - Auto-generate WPF dependency properties with
[DependencyProperty] - AttachedProperty Generator - Auto-generate WPF attached properties with
[AttachedProperty]
We welcome contributions! Please read our guidelines:
- Contribution Guidelines - How to contribute to ATC projects
- Coding Guidelines - Code style and best practices
This project is licensed under the MIT License - see the LICENSE file for details.
Built with β€οΈ by the ATC.Net team and contributors.
- Visit atc-net.github.io for more ATC projects
- Report issues on GitHub Issues
- Contribute on GitHub









