Base WPF framework library providing MVVM infrastructure, value converters, extensions, and helpers.
$ dotnet add package Atc.WpfA 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.
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:
Sample tab shows how to use the control or feature.XAML tab displays the corresponding XAML markup.CodeBehind tab reveals the underlying code-behind.ViewModel tab displays the associated ViewModel, if used.Readme tab 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" />
<!-- Component styles (dialogs, notifications, viewers) -->
<ResourceDictionary Source="pack://application:,,,/Atc.Wpf.Components;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, Carousel, CountrySelector |
| 3. Forms | Atc.Wpf.Forms | Labeled form fields with validation | LabelTextBox, LabelComboBox, LabelDatePicker |
| 4. Components | Atc.Wpf.Components | Composite high-level components | InfoDialogBox, Flyout, DualListSelector, JsonViewer |
Quick Guidelines:
Atc.Wpf.Forms) for standard forms - they include labels, validation, and mandatory indicatorsAtc.Wpf.Controls) when you need custom layouts or are building composite controlsAtc.Wpf.Components) for dialogs, viewers, and settings panelsA 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 | Alert, Card, Badge, Chip, Avatar, AvatarGroup, Divider, Carousel, Breadcrumb, Stepper, Segmented, Timeline, Popover | Atc.Wpf.Controls |
| Flyouts | Flyout, FlyoutHost, FlyoutService | Atc.Wpf.Components |
| Input Controls | NumericBox, IntegerBox, DecimalBox, CurrencyBox, ToggleSwitch, RangeSlider, Rating, FilePicker, DirectoryPicker | Atc.Wpf.Controls |
| Color Controls | HueSlider, SaturationBrightnessPicker, TransparencySlider, WellKnownColorPicker | Atc.Wpf.Controls |
| Buttons | ImageButton, SplitButton, AuthenticationButton, ConnectivityButton | Atc.Wpf.Controls |
| Progress | BusyOverlay, LoadingIndicator, Overlay, Skeleton | Atc.Wpf.Controls |
| Drag & Drop | DragDropAttach | Atc.Wpf |
| Selectors | CountrySelector, LanguageSelector, FontFamilySelector | Atc.Wpf.Controls |
| Selectors | DualListSelector | Atc.Wpf.Components |
| Labeled Form Controls | LabelTextBox, LabelIntegerBox, LabelComboBox, LabelDatePicker, LabelColorPicker, + 20 more | Atc.Wpf.Forms |
| Dialogs | InfoDialogBox, QuestionDialogBox, InputDialogBox, InputFormDialogBox, ColorPickerDialogBox | Atc.Wpf.Forms / Components |
| Viewers | JsonViewer, TerminalViewer | Atc.Wpf.Components |
| Notifications | ToastNotification, ToastNotificationManager, IToastNotificationService | Atc.Wpf.Components |
| Printing | IPrintService, PrintService, PrintPreviewWindow | Atc.Wpf / Atc.Wpf.Components |
| Undo/Redo | IUndoRedoService, UndoRedoService, UndoRedoHistoryView | Atc.Wpf / Atc.Wpf.Components |
| Animation | AnimationExtensions, AnimateAttach, AnimationParameters | Atc.Wpf |
| Clipboard | IClipboardService, ClipboardService | Atc.Wpf |
| Hotkeys | IHotkeyService, HotkeyService | Atc.Wpf |
| Navigation | INavigationService, INavigationGuard | Atc.Wpf |
| Screen Capture | ICaptureService, CaptureService | Atc.Wpf.Components |
| Busy Indicator | IBusyIndicatorService, BusyIndicatorService | Atc.Wpf.Components |
| Theming | NiceWindow, ThemeSelector, AccentColorSelector, TransitioningContentControl | Atc.Wpf.Theming |
| Font Icons | FontAwesome 5 (3 variants), FontAwesome 7 (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.
INotifyPropertyChanged implementation via [ObservableProperty] attributeCanExecute support via [RelayCommand] attribute| 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 |
|---|---|---|---|
| Alert | Inline message | Severity levels, variants, dismissible | Readme |
| 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 |
| Carousel | Image carousel | Navigation, auto-play, swipe | Readme |
| Breadcrumb | Navigation path | Overflow, custom separators | Readme |
| Popover | Positioned popup | Placement modes, triggers, light dismiss | Readme |
| Stepper | Step-by-step progress | Cancelable transitions | Readme |
| Segmented | Segment selector | Mutually exclusive selection | Readme |
| Timeline | Timeline display | Vertical/horizontal, alternate mode | Readme |
| Service | Description | Documentation |
|---|---|---|
| IClipboardService | MVVM-friendly clipboard operations with history | Readme |
| IUndoRedoService | Undo/redo with command grouping and history limits | Readme |
| IHotkeyService | Global and local keyboard shortcut management | - |
| INavigationService | View navigation with guards and history | - |
| IPrintService | Print and print-preview service interface | Readme |
Reusable animation utilities for fade, slide, and scale effects — both async code-behind and XAML-only attached properties.
| Component | Description | Documentation |
|---|---|---|
| AnimationExtensions | Async extension methods (FadeIn/Out, SlideIn/Out, ScaleIn/Out) | Readme |
| AnimateAttach | XAML attached properties for declarative animations | Readme |
| AnimationParameters | Configuration with presets (Fast, Default, Slow) | Readme |
| Component | Description | Documentation |
|---|---|---|
| DragDropAttach | XAML attached properties for declarative drag-and-drop | Readme |
Infrastructure framework providing reusable drag-and-drop behavior via attached properties, interfaces (IDragHandler, IDropHandler), and adorners.
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, CurrencyBox, IntegerXyBox, DecimalXyBox, PixelSizeBox |
| Toggle & Slider | ToggleSwitch, RangeSlider, Rating |
| Pickers | DirectoryPicker, FilePicker |
| Text Input | RichTextBoxEx |
| Control | Description | Documentation |
|---|---|---|
| ImageButton | Button with bitmap/SVG image | Readme |
| ImageToggledButton | Two-state toggle button | Readme |
| SplitButton | Primary action + dropdown menu | Readme |
| AuthenticationButton | Login/logout toggle | Readme |
| ConnectivityButton | Connect/disconnect toggle | Readme |
| Control | Description | Documentation |
|---|---|---|
| WellKnownColorPicker | Named color palette picker | Readme |
| HueSlider | Hue selection slider | Readme |
| SaturationBrightnessPicker | 2D saturation/brightness picker | Readme |
| TransparencySlider | Alpha channel slider | Readme |
| Control | Description | Documentation |
|---|---|---|
| DockPanelPro | IDE-style docking panel | Readme |
| GridLines | Grid overlay for debugging | Readme |
| GroupBoxExpander | Collapsible group box | Readme |
| Control | Description | Documentation |
|---|---|---|
| Alert | Inline message with severity levels and variants | Readme |
| Avatar | User profile pictures with initials fallback | Readme |
| Carousel | Image carousel/slideshow with navigation | Readme |
| Badge | Status indicator overlay | Readme |
| Card | Elevated container with header/footer | Readme |
| Chip | Tag/filter interactive elements | Readme |
| Divider | Visual separator (horizontal/vertical) | Readme |
| Breadcrumb | Navigation path with overflow | Readme |
| Popover | Positioned popup with placement and triggers | Readme |
| Segmented | Mutually exclusive segment selector | Readme |
| Stepper | Step-by-step progress indicator | Readme |
| Timeline | Vertical/horizontal timeline display | Readme |
| Control | Description | Documentation |
|---|---|---|
| DragDropAttach | XAML-driven drag-and-drop framework | Readme |
Note: DragDrop is infrastructure in
Atc.Wpf(core), not in Controls.
| Control | Description | Documentation |
|---|---|---|
| CountrySelector | Country dropdown with flags | Readme |
| LanguageSelector | Language dropdown with flags | Readme |
| FontFamilySelector | Font family dropdown with previews | Readme |
| Control | Description | Documentation |
|---|---|---|
| BusyOverlay | Dimming overlay with loading indicator | Readme |
| LoadingIndicator | Animated loading indicator | Readme |
| Overlay | Content dimming with fade animations | Readme |
| Skeleton | Loading placeholder with shimmer effect | Readme |
Form field components with labels, validation, and mandatory indicators for building data entry forms.
Labeled input controls with built-in validation and consistent styling:
All label controls support:
Higher-level composite components combining multiple controls for business-ready UI.
| Control | Description | Documentation |
|---|---|---|
| InfoDialogBox | Information-only dialog | Readme |
| QuestionDialogBox | Yes/No confirmation dialog | Readme |
| InputDialogBox | Single input dialog | Readme |
| InputFormDialogBox | Multi-field form dialog | Readme |
| BasicApplicationSettingsDialogBox | Settings dialog | Readme |
| DialogService | MVVM-friendly dialog management | - |
Note: ColorPickerDialogBox is located in Atc.Wpf.Forms.Dialogs
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 |
| Control | Description | Documentation |
|---|---|---|
| DualListSelector | Dual-list transfer control with filtering, reordering, and drag-drop | Readme |
| Control | Description | Documentation |
|---|---|---|
| JsonViewer | JSON document viewer with syntax highlighting | Readme |
| TerminalViewer | Terminal/console output viewer | Readme |
| Control | Description | Documentation |
|---|---|---|
| ApplicationMonitorView | Application event monitoring component | Readme |
| Control | Description | Documentation |
|---|---|---|
| ToastNotification | Toast notification system | Readme |
| IToastNotificationService | MVVM-friendly notification service | Readme |
| Control | Description | Documentation |
|---|---|---|
| IPrintService / PrintService | MVVM-friendly print and preview service | Readme |
| Control | Description | Documentation |
|---|---|---|
| UndoRedoHistoryView | Unified history view for navigating undo/redo stacks | Readme |
| Control | Description | Documentation |
|---|---|---|
| IBusyIndicatorService | MVVM-friendly busy overlay management | Readme |
| Control | Description | Documentation |
|---|---|---|
| ICaptureService | MVVM-friendly screen and element capture | Readme |
| Control | Description | Documentation |
|---|---|---|
| BasicApplicationSettingsView | Embeddable settings panel | Readme |
Render SVG and image resources using font-based icon systems for crisp, scalable icons. See the complete Font Icons documentation for detailed usage.
Font*) and image-based (Image*) renderingFont Awesome 5 (Solid, Regular, Brand), Font Awesome 7 (Solid, Regular, Brand), Bootstrap Glyphicons, Material Design, Weather Icons, IcoFont
Complete theming infrastructure with Light and Dark mode support for all WPF controls. See the complete Theming documentation for detailed usage.
| Control | Description | Documentation |
|---|---|---|
| NiceWindow | Enhanced window with title bar, commands, overlays | Readme |
| ThemeSelector | Light/Dark theme dropdown | Readme |
| AccentColorSelector | Accent color dropdown | Readme |
| TransitioningContentControl | Animated content transitions | Readme |
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:
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 filteringAtc.Wpf includes powerful source generators from Atc.XamlToolkit to reduce boilerplate code:
[ObservableProperty] and [RelayCommand][DependencyProperty][AttachedProperty]We welcome contributions! Please read our guidelines:
This project is licensed under the MIT License - see the LICENSE file for details.
Built with ❤️ by the ATC.Net team and contributors.