我有一个绑定在整数上的 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}" />
我不确定,为什么你不能使用现有的转换器来实现这一点。这是简单的实现:
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];
}