Last active
January 21, 2017 13:21
-
-
Save thoemmi/03b81c07586f63accb83521d783d6749 to your computer and use it in GitHub Desktop.
Presenting Byte Size Values in WPF, see https://thomasfreudenberg.com/archive/2017/01/21/presenting-byte-size-values-in-wpf/ for description
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class FormatKbSizeConverter : IValueConverter { | |
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode)] | |
private static extern long StrFormatByteSizeW(long qdw, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszBuf, | |
int cchBuf); | |
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { | |
var number = System.Convert.ToInt64(value); | |
var sb = new StringBuilder(32); | |
StrFormatByteSizeW(number, sb, sb.Capacity); | |
return sb.ToString(); | |
} | |
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { | |
return DependencyProperty.UnsetValue; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<Window | |
x:Class="FormatByteSizeConverterDemo.MainWindow" | |
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" | |
xmlns:local="clr-namespace:FormatByteSizeConverterDemo" | |
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" | |
xmlns:system="clr-namespace:System;assembly=mscorlib" | |
Title="MainWindow" | |
Width="525" | |
Height="350" | |
mc:Ignorable="d"> | |
<Grid> | |
<Grid.Resources> | |
<!-- array of numbers --> | |
<x:Array x:Key="numbers" Type="system:Int64"> | |
<system:Int64>-1</system:Int64> | |
<system:Int64>0</system:Int64> | |
<system:Int64>1</system:Int64> | |
<system:Int64>2</system:Int64> | |
<system:Int64>532</system:Int64> | |
<system:Int64>1340</system:Int64> | |
<system:Int64>23506</system:Int64> | |
<system:Int64>2400016</system:Int64> | |
<system:Int64>2400000000</system:Int64> | |
<x:Static Member="system:Int64.MaxValue" /> | |
</x:Array> | |
<!-- the actual converter --> | |
<local:FormatKbSizeConverter x:Key="FormatKbSizeConverter" /> | |
<!-- style to reght-align the values in the DataGrid --> | |
<Style x:Key="RightCell" TargetType="{x:Type TextBlock}"> | |
<Setter Property="TextAlignment" Value="Right" /> | |
<Setter Property="HorizontalAlignment" Value="Stretch" /> | |
</Style> | |
</Grid.Resources> | |
<DataGrid | |
AutoGenerateColumns="False" | |
IsReadOnly="True" | |
ItemsSource="{StaticResource numbers}"> | |
<DataGrid.Resources> | |
<!-- the actual converter --> | |
<local:FormatKbSizeConverter x:Key="FormatKbSizeConverter" /> | |
</DataGrid.Resources> | |
<DataGrid.Columns> | |
<!-- First column shows the plain values --> | |
<DataGridTextColumn | |
Binding="{Binding}" | |
ElementStyle="{StaticResource RightCell}" | |
Header="Plain" /> | |
<!-- Second column shows the formatted values --> | |
<DataGridTextColumn | |
Binding="{Binding Converter={StaticResource FormatKbSizeConverter}}" | |
ElementStyle="{StaticResource RightCell}" | |
Header="Formatted" /> | |
</DataGrid.Columns> | |
</DataGrid> | |
</Grid> | |
</Window> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment