.net - 在将输入字符添加到文本之前将其交换到 WPF 文本框

标签 .net wpf textbox

我有一个用于处理数字的文本框。因此我只接受[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/

相关文章:

c# - WP7 XAML 中控件之间的动态绑定(bind)

javascript - 可以使用 JavaScript 将插入符号滚动到单个 HTML 文本字段内的 View 中吗?

C# 自动清除 Winform 文本框

c# - C# 中的属性名称和方法名称可以相同吗?

c# - 在结构上隐藏无参数构造函数

c# - 将对象初始化器语法与接口(interface)一起使用

.net - LINQ to MySql 数据提供程序

c# - WPF - 如何在 ViewModel 之间共享集合的单个实例?

c# - 使用 MVVM 代码绑定(bind)对 ListBox 进行排序

WPF 文本框验证