我有一个用于处理数字的文本框。因此我只接受[0-9.,]。然而, ”。”是唯一有效的小数点分隔符。因此,我只希望在我的文本中包含此内容,但我也想接受“,”,并将其与“.”交换。使得显示的字符是有效的。
那么 - 如何交换输入字符?我假设我可以获取它并在某些输入事件中交换它?或者我必须在将其插入文本框后替换它吗?
我尝试在 OnPreviewKeyDown 和 OnPreviewTextInput 事件中交换它,但保存输入字符的属性是只读的。我想做这样的事情:
protected override void OnPreviewKeyDown(System.Windows.Input.KeyEventArgs e)
{
if (e.Key == Key.OemComma)
{
e.Key = Key.OemPeriod;
}
base.OnPreviewKeyDown(e);
}
最佳答案
您可以使用 TextChanged 事件并每次替换 Text 属性。
private void textBox_TextChanged(object sender, TextChangedEventArgs e)
{
TextBox box = (TextBox)sender;
box.Text = box.Text.Replace(",", ".");
}
如果您使用绑定(bind),您可以创建一个转换器,在文本转换回来时替换文本。
<TextBox Name="textBox" Text="{Binding Path=number, Converter=DecimalConverter}" />
和
public class DecimalConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
return value;
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
string strValue = (string)value;
return strValue.Replace(",",".");
}
}
关于.net - 在将输入字符添加到文本之前将其交换到 WPF 文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3404935/