UToolKit 1.1.1

dotnet add package UToolKit --version 1.1.1
NuGet\Install-Package UToolKit -Version 1.1.1
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="UToolKit" Version="1.1.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add UToolKit --version 1.1.1
#r "nuget: UToolKit, 1.1.1"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install UToolKit as a Cake Addin
#addin nuget:?package=UToolKit&version=1.1.1

// Install UToolKit as a Cake Tool
#tool nuget:?package=UToolKit&version=1.1.1


Library that contains useful tools for WPF application.
It is recommended to use this library with Fody.PropertyChanged.

Release notes:

  • Added resource dictionary that contains all converters from current package. To use it check examples below.

Main features:

  • ObservableObject (INotifyPropertyChanged implementation)
  • IRefreshableCommand (inherits ICommand, allows to call ICommand.CanExecuteChanged manually)
  • RelayCommand (IRefreshableCommand implementation)
  • RelayAsyncCommand (IRefreshableCommand async implementation)
  • RelaySingleTaskAsyncCommand (IRefreshableCommand async implementation, designed for single task execution)


  • InverseBooleanConverter
  • BooleanToVisibilityConverter
  • BooleanToHiddenVisibilityConverter
  • InverseBooleanToHiddenVisibilityConverter
  • InverseBooleanToVisibilityConverter


  • ControlExtensions
    • FousMode - focus mode for Control. There is two modes: Default and FocusOnLoad.
  • HyperlinkExtensions
    • IsExternal - if true Hyperlink will execute Process.Start using Hyperlink.NavigateUri after click.
  • WindowExtensions
    • CloseCommand - command which executes on windows closing. If ICommand.CanExecute() returns false - window closing will be cancalled.
    • CloseCommandParameter - parameter for CloseCommand.
    • PlacementStorageStrategy - window placement storage strategy. There are 2 different implemented strategies, RegistryStorage and SettingsStorage. It is possible to implement custom strategy using IWindowPlacementStorage.
  • RoutedCommand bindings - allows to bind ICommand to RoutedCommand.


  • IWindowService - (implementation: WindowService)
    • IsActive - indicates whether the window is active.
    • IsVisible - indicates whether the window is visible.
    • Activate() - attempts to brind the window to the foreground and activates it.
    • Close() - closes window.
    • Close(bool dialogResult) - closes window with specified dialog result.
    • Hide() - hides window.
    • Show() - shows window.
  • ITextBoxService - (implementation: TextBoxService)
    • event TextChanged - informs that the text has changed.
    • event SelectionChanged - informs that the selection has changed.
    • Text - allows to get or set text to TextBox (will not break bindings).
    • CaretIndex - gets current caret index.
    • SelectionLength - gets selected text length.
    • SelectedText - gets or sets selected text in text box (will not break bindings).
    • Select(int start, int length) - selects a range of text in text box.
    • SelectAll() - selects all text in text box.
  • IPasswordSupplier - (implementation: PasswordSupplier)
    • event PasswordChanged - occurs when the password of the PasswordBox changes.
    • Password - allows to get or set password from/to PasswordBox.
    • SecurePassword - gets secure password from PasswordBox.
    • Clear() - clears all password.

Getting started.

First you need to include namespace to your code or markup.

For XAML it can look like:

<Window xmlns:tk="https://github.com/nullsoftware/UToolKit" />

And for C#:

using NullSoftware;
using NullSoftware.Services;
using NullSoftware.ToolKit;
using NullSoftware.ToolKit.Converters;
using NullSoftware.ToolKit.Extensions;


To use converters just add MergedDictionary with source pack://application:,,,/UToolKit;component/ToolKit/Converters.xaml in your App.xaml:

                <ResourceDictionary Source="pack://application:,,,/UToolKit;component/ToolKit/Converters.xaml" />

How to set PlacementStorageStrategy:

<Window xmlns:tk="https://github.com/nullsoftware/UToolKit" 
        tk:WindowExtensions.PlacementStorageStrategy="{tk:RegistryStorage NameFormat=Placement, Hive=CurrentUser, Key='SOFTWARE\MyCompany\MyApp'}" />


<Window xmlns:tk="https://github.com/nullsoftware/UToolKit" 
        tk:WindowExtensions.PlacementStorageStrategy="{tk:SettingsStorage Settings={x:Static prop:Settings.Default}}" />

How to use RoutedCommandHandlers:

<Window xmlns:tk="https://github.com/nullsoftware/UToolKit">
        <tk:RoutedCommandHandler RoutedCommand="ApplicationCommands.Create" Command="{Binding CreateCommand}"/>
        <tk:RoutedCommandHandler RoutedCommand="ApplicationCommands.Open" Command="{Binding OpenCommand}"/>
            <RowDefinition Height="Auto"/>
        <Menu Grid.Row="0">
            <MenuItem Header="_File">
                <MenuItem Header="_New" Command="ApplicationCommands.Create" />
                <MenuItem Header="_Open" Command="ApplicationCommands.Open" />
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net5.0-windows7.0 is compatible.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net6.0-windows7.0 is compatible.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net7.0-windows7.0 is compatible.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp3.0 is compatible.  netcoreapp3.1 is compatible. 
.NET Framework net452 is compatible.  net46 is compatible.  net461 is compatible.  net462 is compatible.  net463 was computed.  net47 is compatible.  net471 is compatible.  net472 is compatible.  net48 is compatible.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETCoreApp 3.0

    • No dependencies.
  • .NETCoreApp 3.1

    • No dependencies.
  • .NETFramework 4.5.2

    • No dependencies.
  • .NETFramework 4.6

    • No dependencies.
  • .NETFramework 4.6.1

    • No dependencies.
  • .NETFramework 4.6.2

    • No dependencies.
  • .NETFramework 4.7

    • No dependencies.
  • .NETFramework 4.7.1

    • No dependencies.
  • .NETFramework 4.7.2

    • No dependencies.
  • .NETFramework 4.8

    • No dependencies.
  • net5.0-windows7.0

    • No dependencies.
  • net6.0-windows7.0

    • No dependencies.
  • net7.0-windows7.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.1.1 181 5/17/2023 248 2/25/2023
1.1.0 224 2/24/2023
1.0.2 234 2/24/2023 277 1/28/2023 304 12/18/2022
1.0.0 292 12/16/2022 141 12/16/2022
0.0.8-alpha 139 12/16/2022 152 11/12/2022 177 8/12/2022 179 5/11/2022 161 5/10/2022
0.0.7-alpha 164 5/10/2022
0.0.6-alpha 171 4/27/2022
0.0.4-preview 180 4/7/2022
0.0.3-preview 166 4/7/2022
0.0.2-preview 164 4/2/2022
0.0.1-preview 170 4/1/2022

Added resource dictionary for converters