如何强制ComboBox的文本框只能输入double?

时间:2019-04-23 03:34:50

标签: wpf

我想使用ComboBox来存储和输入字体大小。

所以我创建了一个ComboBox并将IsEditable设置为true。

现在问题来了,我不知道如何强制ComboBox的文本框只能输入double

我该怎么做?你能帮我吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

您可以在ComboBox的PreviewTextInput事件中像处理TextBox一样处理它。

Xaml:

<ComboBox IsEditable="True" PreviewTextInput="ComboBox_PreviewTextInput"/>

代码:

private void ComboBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
    var approvedDecimalPoint = false;
    if (e.Text == ".")
    {
        if (!((ComboBox)sender).Text.Contains("."))
            approvedDecimalPoint = true;
    }
    if (!(char.IsDigit(e.Text, e.Text.Length - 1) || approvedDecimalPoint))
        e.Handled = true;
}

或者您也可以使用Regex

答案 1 :(得分:1)

您可以处理PreviewTextInputDataObject.Pasting事件。像这样:

private void ComboBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
    e.Handled = !IsValid(e.Text);
}

private void ComboBox_Pasting(object sender, DataObjectPastingEventArgs e)
{
    if (!e.DataObject.GetDataPresent(typeof(string)) || !IsValid(e.DataObject.GetData(typeof(string)) as string))
        e.CancelCommand();
}

private static bool IsValid(string s)
{
    double d;
    return double.TryParse(s, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out d);
}

XAML:

<ComboBox IsEditable="True" PreviewTextInput="ComboBox_PreviewTextInput"
              DataObject.Pasting="ComboBox_Pasting" ... >