![]() |
VOOZH | about |
dotnet add package CP.Xaml.Converters --version 1.1.3
NuGet\Install-Package CP.Xaml.Converters -Version 1.1.3
<PackageReference Include="CP.Xaml.Converters" Version="1.1.3" />
<PackageVersion Include="CP.Xaml.Converters" Version="1.1.3" />Directory.Packages.props
<PackageReference Include="CP.Xaml.Converters" />Project file
paket add CP.Xaml.Converters --version 1.1.3
#r "nuget: CP.Xaml.Converters, 1.1.3"
#:package CP.Xaml.Converters@1.1.3
#addin nuget:?package=CP.Xaml.Converters&version=1.1.3Install as a Cake Addin
#tool nuget:?package=CP.Xaml.Converters&version=1.1.3Install as a Cake Tool
Converters for WPF (.NET Framework 4.6.2 / .NET 8 / .NET 9)
A rich collection of ready-to-use value & multi-value converters for WPF plus some numeric markup extensions.
PM> Install-Package CP.Xaml.Converters
<Application x:Class="App" ...
xmlns:converters="https://github.com/ChrisPulman/XamlConverters">
<Application.Resources>
<converters:ConvertersDictionary />
</Application.Resources>
</Application>
Use in bindings:
<TextBlock Text="{Binding Title, Converter={StaticResource ToUpperConverter}}"/>
Some frequently used stateless converters are exposed through ConvertersRegistry so you can avoid resource keys:
xmlns:c="clr-namespace:CP.Xaml.Converters"
<TextBlock Visibility="{Binding IsBusy, Converter={x:Static c:ConvertersRegistry.BoolToVisibility}}"/>
Available singletons (see ConvertersRegistry.cs): Not, BoolToVisibility, BoolToVisibilityAdv, NotNullToVisibility, NotNullToBool, NullToBool, NullCoalesce, InvertVisibility, BgToReadable, Percentage, Arithmetic, Math, Equality, Comparison, And, Or, Xor, MultiFormat.
Allow inline numeric objects in XAML without x:Static:
xmlns:c="clr-namespace:CP.Xaml.Converters"
<Setter Property="Tag" Value="{c:Int32 42}"/>
<Setter Property="Tag" Value="{c:Double 2.5}"/>
Available: Int16, Int32, Single (float), Double.
(Each listed as Resource Key = Class Name when using ConvertersDictionary)
<TextBlock Text="{Binding Count, Converter={StaticResource ArithmeticConverter}, ConverterParameter='*2'}"/>
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource MathConverter}" ConverterParameter="({0} * {1}) / 100">
<Binding Path="Base"/>
<Binding Path="Percent"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
<RowDefinition Height="{Binding ActualWidth, ElementName=Root, Converter={StaticResource PercentageConverter}, ConverterParameter=25%}" />
<Rectangle Width="{Binding BaseWidth, Converter={StaticResource MultiplierConverter}, ConverterParameter=1.5}"/>
double to 1 decimal place if > parameter else 2.
<TextBlock Text="{Binding Speed, Converter={StaticResource ValueGtXConverter}, ConverterParameter=40}"/>
<CheckBox IsChecked="{Binding ItemsCount, Converter={StaticResource ValueGreaterThanXToBoolConverter}, ConverterParameter=5}" Content=">5?"/>
<CheckBox IsChecked="{Binding Value, Converter={StaticResource IsGreaterThanOrEqualToConverter}, ConverterParameter=100}"/>
NullToBoolConverter.IsNull or .NotNull static singletons; or set ReturnTrueIfNull property in XAML.<RadioButton Content="Large" IsChecked="{Binding Size, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter=Large}"/>
<CheckBox IsChecked="{Binding Items, Converter={StaticResource CountToBooleanConverter}, ConverterParameter='>5'}" Content=">5 Items"/>
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource MultiStringFormatConverter}" ConverterParameter="{0} - {1:0.0} ({2})">
<Binding Path="Name"/>
<Binding Path="Price"/>
<Binding Path="Code"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
<TextBlock Text="{Binding Description, Converter={StaticResource NullCoalesceConverter}, ConverterParameter='(none)'}"/>
#RRGGBB or RRGGBB returns Color.<Border Padding="{Binding Spacer, Converter={StaticResource IntToThicknessConverter}, ConverterParameter='4,2,4,2'}"/>
<Border Padding="{Binding Gap, Converter={StaticResource ThicknessUniformConverter}, ConverterParameter=HV}"/>
<ComboBox SelectedValue="{Binding SelectedStatus}" SelectedValuePath="Tag">
<ComboBoxItem Content="Open" Tag="{Binding 'Open', Converter={StaticResource EnumConverter}, ConverterParameter={x:Type local:TicketStatus}}"/>
</ComboBox>
Use MultiConverter to pipe the output of one into the next:
<converters:MultiConverter x:Key="InvertVisibilityChain">
<converters:BoolNegationConverter/>
<converters:BoolToVisibilityConverter/>
</converters:MultiConverter>
<TextBlock Visibility="{Binding IsClosed, Converter={StaticResource InvertVisibilityChain}}"/>
<TextBlock Text="Ready" Visibility="{Binding Path=., Converter={x:Static c:ConvertersRegistry.BoolToVisibility}}">
<TextBlock.Visibility>
<MultiBinding Converter="{x:Static c:ConvertersRegistry.And}">
<Binding Path="IsLoaded"/>
<Binding Path="IsValid"/>
<Binding Path="HasPermission"/>
</MultiBinding>
</TextBlock.Visibility>
</TextBlock>
<Window ... xmlns:conv="https://github.com/ChrisPulman/XamlConverters">
<Window.Resources>
<conv:ConvertersDictionary />
</Window.Resources>
<StackPanel Margin="20" DataContext="{Binding SampleViewModelInstance}">
<TextBlock Text="{Binding Title, Converter={StaticResource ToUpperConverter}}"/>
<TextBlock Text="{Binding Amount, Converter={StaticResource DoubleToCurrencyStringConverter}}"/>
<ProgressBar Value="{Binding Progress}" Maximum="100" Height="20"/>
<TextBlock Text="{Binding Progress, Converter={StaticResource ArithmeticConverter}, ConverterParameter='*2'}"/>
<TextBlock Foreground="{Binding HexColour, Converter={StaticResource BackgroundColorToBwForegroundConverter}}"
Background="{Binding HexColour, Converter={StaticResource HexStringToSolidColorBrushConverter}}"
Text="Contrast Demo" Padding="8"/>
<CheckBox Content="Is Active" IsChecked="{Binding IsActive}"/>
<TextBlock Text="Active" Visibility="{Binding IsActive, Converter={StaticResource BoolToVisibilityConverter}}"/>
</StackPanel>
</Window>
PRs welcome. Please keep converters small, focused, documented and unit-tested.
MIT
XamlConverters - By Chris Pulman - Empowering Industrial Automation with Reactive Technology ⚡🏭
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0-windows7.0 net8.0-windows7.0 is compatible. net9.0-windows net9.0-windows was computed. net9.0-windows7.0 net9.0-windows7.0 is compatible. net10.0-windows net10.0-windows was computed. |
| .NET Framework | net472 net472 is compatible. net48 net48 was computed. net481 net481 was computed. |
Showing the top 2 NuGet packages that depend on CP.Xaml.Converters:
| Package | Downloads |
|---|---|
|
CrissCross.WPF.UI
A Reactive Navigation Framework for ReactiveUI |
|
|
CrissCross.WPF.Plot
A Reactive Navigation Framework for ReactiveUI |
This package is not used by any popular GitHub repositories.
Compatability with Net 6/7/8 and netstandard2.0