我想使用ComboBox来存储和输入字体大小。
所以我创建了一个ComboBox
并将IsEditable
设置为true。
现在问题来了,我不知道如何强制ComboBox的文本框只能输入double
?
我该怎么做?你能帮我吗?
谢谢。
答案 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)
您可以处理PreviewTextInput
和DataObject.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" ... >