在文本框中间添加点,并在十六进制格式的数字上绑定

问题描述 投票:0回答:1

我有一个绑定在整数上的 WPF 文本框。 该数字应以十六进制格式显示,第二个位置有一个点。 而且这个数字必须是可编辑的。

我有:

int number = 32; // 32 dec = 0x20 hex

我想在文本框中输入什么:

2.0

我尝试使用 ValueConverter 将十进制数转换为十六进制数,之后我期望 StringFormat 可以格式化该数字,但它不起作用。

<TextBox Text="{Binding Number, Converter={StaticResource IntToHex}, StringFormat="{}{0:0\\.0}", UpdateSourceTrigger=PropertyChanged}" />
wpf wpf-controls
1个回答
0
投票

我不确定,为什么你不能使用现有的转换器来实现这一点。这是简单的实现:

int number = 32; // 32 dec = 0x20 hex

Console.WriteLine(IntToHex(number, 1)); // -> produces 2.0
Console.WriteLine(IntToHex(number, -1)); // -> produces 2.0
// If decimalPointPosition < 0, it will be placed 
// at given position counting from the end.
// If decimalPointPosition >= 0, it will be placed 
// at given position counting from the start.
string IntToHex(int n, int decimalPointPosition)
{
    var hex = Convert.ToString(n, 16);
    var decimalPointPositionAbs = Math.Abs(decimalPointPosition);
    if (decimalPointPositionAbs >= hex.Length) return hex;

    var index = new Index(decimalPointPositionAbs, decimalPointPosition < 0);
    var range = new Range(0, index);
    return hex[range] + "." + hex[index];
}
© www.soinside.com 2019 - 2024. All rights reserved.