Snt.Lib.Wpf 0.4.1
Snt.Lib.Wpf
WPF control library providing layout panels, a notification system, and badge controls.
Installation
dotnet add package Snt.Lib.Wpf
XAML namespace
xmlns:st="clr-namespace:Snt.Lib.Wpf;assembly=Snt.Lib.Wpf"
Converters
Use built-in converter markup extensions directly:
<TextBlock
Text="Active"
Visibility="{Binding IsActive, Converter={st:TrueToVisible}}" />
Built-in converters:
TrueToVisible(true=>Visible, everything else =>Collapsed)FalseToVisible(false=>Visible, everything else =>Collapsed)FalseToHidden(false=>Hidden, everything else =>Visible)TrueToHidden(true=>Hidden, everything else =>Visible)NullToVisible(null=>Visible, everything else =>Collapsed)NotNullToVisible(non-null=>Visible,null=>Collapsed)NullOrWhiteSpaceToVisible(blank text =>Visible, non-blank =>Collapsed)NotNullOrWhiteSpaceToVisible(non-blank text =>Visible, blank =>Collapsed)BooleanNegation(true=>false,false=>true)
Converters with configurable states expose per-instance properties:
<TextBlock
Text="Active"
Visibility="{Binding IsActive, Converter={st:TrueToVisible FalseVisibility=Hidden}}" />
<TextBlock
Text="{Binding Description}"
Visibility="{Binding Description, Converter={st:NotNullOrWhiteSpaceToVisible NullOrWhiteSpaceVisibility=Hidden}}" />
Create app-specific converters with low boilerplate using LambdaConverter:
using System.Windows;
using System.Windows.Data;
using Snt.Lib.Wpf;
public static class AppConverters
{
public static readonly IValueConverter AvailabilityToVisibility =
LambdaConverter.Create<bool, Visibility>(ToVisibility);
private static Visibility ToVisibility(bool value)
{
return value ? Visibility.Visible : Visibility.Collapsed;
}
}
LambdaConverter also supports converter parameters and full context (targetType, culture) overloads when needed.
xmlns:local="clr-namespace:YourApp"
<TextBlock
Text="Ready"
Visibility="{Binding IsReady, Converter={x:Static local:AppConverters.AvailabilityToVisibility}}" />
Layout controls
AutoGrid
A self-indexing grid that auto-places visible children into rows and columns.
<st:AutoGrid ColumnCount="3" ColumnWidth="*" RowHeight="Auto">
<TextBlock Text="A" />
<TextBlock Text="B" />
<TextBlock Text="C" />
<TextBlock Text="D" />
</st:AutoGrid>
Use the Columns / Rows properties for explicit definitions:
<st:AutoGrid Columns="Auto,*,2*" Rows="Auto,*">
<!-- children are placed left-to-right, top-to-bottom -->
</st:AutoGrid>
Grid
Extended System.Windows.Controls.Grid with XAML-friendly string setters for row/column definitions.
<st:Grid ColumnDefinitions="Auto,*,2*" RowDefinitions="Auto,*">
<TextBlock Text="Cell 0,0" />
<TextBlock Text="Cell 0,1" Grid.Column="1" />
</st:Grid>
StackPanel
Stack panel with Spacing between visible children (collapsed children do not add spacing).
<st:StackPanel Orientation="Vertical" Spacing="8">
<TextBlock Text="First" />
<TextBlock Text="Second" />
</st:StackPanel>
WrapPanel
Wrap panel with independent HorizontalSpacing and VerticalSpacing.
<st:WrapPanel HorizontalSpacing="8" VerticalSpacing="4">
<Button Content="Tag 1" />
<Button Content="Tag 2" />
<Button Content="Tag 3" />
</st:WrapPanel>
Badge controls
Display-only, clickable, and toggleable badges with configurable appearance and icon placement.
<st:BadgeInfo Appearance="Info" Text="Status" />
<st:BadgeAction Appearance="Primary" Text="Action" Click="OnClick" />
<st:BadgeToggle Appearance="Success" Text="Toggle" IsChecked="{Binding IsActive}" />
BadgeAppearance values
Primary | Secondary | Info | Success | Caution | Danger
Notification system
Setup
- Create a
NotificationService(typically registered in DI):
var service = new NotificationService(maxNotifications: 10);
- Place a
NotificationHostin your window:
<st:NotificationHost Service="{Binding NotificationService}" />
Showing notifications
service.ShowInfo("File saved.");
service.ShowError("Upload failed.", opts => opts.Duration = TimeSpan.FromSeconds(5));
var ack = service.ShowAcknowledgeableWarning("Disk space low.", opts =>
{
opts.ButtonText = "Dismiss";
});
ack.Acknowledged += n => Debug.WriteLine("User acknowledged");
var progress = service.ShowProgress("Uploading...");
progress.UpdateProgress(50, "Half done");
progress.Complete("Done!");
Custom templates
Override NotificationTemplate, AcknowledgeableTemplate, or ProgressTemplate on NotificationHost to supply your own DataTemplate for each notification type.
Theme packages
For WPF-UI styled controls, install the companion packages:
- Snt.Lib.Wpf.WpfUi — WPF-UI themed badge controls
- Snt.Lib.Wpf.Notifications.WpfUi — WPF-UI InfoBar notification templates
Showing the top 20 packages that depend on Snt.Lib.Wpf.
| Packages | Downloads |
|---|---|
|
Snt.Lib.Wpf.Notifications.WpfUi
Optional WPF UI templates for Snt.Lib.Wpf NotificationHost.
|
1 |
|
Snt.Lib.Wpf.WpfUi
WPF-UI extension controls for Snt.Lib.Wpf.
|
1 |
.NET 10.0
- CommunityToolkit.Mvvm (>= 8.4.0)