我有一个Editable ComboBox,但只希望在输入它时允许Numbers和Backspace。
我看到了here如何用TextBoxBase.TextChanged向它添加一个TextChange Event。
在编译时,我得到以下错误:
“cboVideo_TextChanged”匹配委托'TextChangedEventHandler`‘没有重载
<ComboBox x:Name="cboVideo"
ItemsSource="{Binding Video_Items}"
SelectedItem="{Binding Video_SelectedItem}"
SelectionChanged="cboVideo_SelectionChanged"
IsEditable="{Binding Video_IsEditable, Mode=TwoWay}"
Text="{Binding Video_Text}"
TextBoxBase.TextChanged="cboVideo_TextChanged"
IsTextSearchEnabled="False"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Width="105"
Margin="0,2,0,0"/>最初是RoutedEventArgs,我把它改成了KeyEventArgs。
// Only allow Numbers and Backspace
//
private void cboVideo_TextChanged(object sender, KeyEventArgs e)
{
if (!(e.Key >= Key.D0 && e.Key <= Key.D9) && e.Key != Key.Back)
{
e.Handled = true;
}
}发布于 2019-03-25 10:34:16
上面写着:
“cboVideo_TextChanged”匹配委托'TextChangedEventHandler`‘没有重载
这是完全正常的,因为您在错误的事件处理程序上使用了错误的事件参数。
不能用KeyEventArgs事件处理TextChanged事件。必须将 TextChangedEventArgs与TextChanged事件处理程序一起使用。
将其更改为TextChangedEventArgs之后,您可以获得通过属性TextChangedEventArgs.Changes更改的任何内容。
然后,只需使用switch()或if()进行任何检查s。您可以检查是否为数字,然后可以将EventArgs.Handled设置为true或false。
注意:您也可以使用RoutedEventArgs,因为TextChangedEventArgs 是基于它的。但我建议使用 TextChangedEventArgs。
https://stackoverflow.com/questions/55287142
复制相似问题