Snt.Lib.Wpf 0.4.3

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"
xmlns:stc="clr-namespace:Snt.Lib.Wpf.Converters;assembly=Snt.Lib.Wpf"

Converters

Controls stay under Snt.Lib.Wpf; converters are available under the dedicated Snt.Lib.Wpf.Converters namespace:

<TextBlock
    Text="Active"
    Visibility="{Binding IsActive, Converter={stc:TrueToVisible}}" />

Built-in converters:

  • BoolToVisibility (configurable true / false visibility mapping)
  • 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)
  • NullOrEmptyToVisible (null or empty text => Visible, whitespace-only text stays visible as text)
  • NotNullOrEmptyToVisible (non-empty text => Visible)
  • NullOrWhiteSpaceToVisible (blank text => Visible, non-blank => Collapsed)
  • NotNullOrWhiteSpaceToVisible (non-blank text => Visible, blank => Collapsed)
  • StringIsNullOrEmpty / StringIsNullOrWhiteSpace
  • StringTrim, StringToUpper, StringToLower
  • NullOrEmptyEnumerableToVisible / NotNullOrEmptyEnumerableToVisible
  • EnumerableHasItems / EnumerableIsNullOrEmpty
  • BooleanNegation (true => false, false => true)

Converters with configurable states expose per-instance properties:

<TextBlock
    Text="Active"
    Visibility="{Binding IsActive, Converter={stc:TrueToVisible FalseVisibility=Hidden}}" />

<TextBlock
    Text="{Binding Description}"
    Visibility="{Binding Description, Converter={stc:NotNullOrWhiteSpaceToVisible NullOrWhiteSpaceVisibility=Hidden}}" />

<TextBlock
    Text="{Binding DisplayName, Converter={stc:StringTrim}}"
    Visibility="{Binding Items, Converter={stc:NotNullOrEmptyEnumerableToVisible}}" />

Create app-specific converters with low boilerplate using LambdaConverter:

using System.Windows;
using System.Windows.Data;
using Snt.Lib.Wpf.Converters;

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

  1. Create a NotificationService (typically registered in DI):
var service = new NotificationService(maxNotifications: 10);
  1. Place a NotificationHost in 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

Version Downloads Last updated
0.4.3 3 04/24/2026
0.4.2 2 04/24/2026
0.4.1 3 04/13/2026
0.4.0 2 04/13/2026