我有combobox
文字可编辑,我使用PreviewTextInput
作为活动。
我不确定这是什么称为正式,但输入combobox
的文本处于变化状态,直到按下返回。这意味着按下空格键会将文本更改为中文字符,并且可以多次按空格键以获得所需的字符,直到输入被命中并且文本完成。
我尝试使用TextChanged
,但是每次按下一个键时都会触发一个事件,当使用Chinnese字符时,在文本完成之前,你可以在任何地方进行8-12次或更多次击键。
此图像展示了变化的状态。在下拉列表中按空格键选项卡,直到输入按下锁定选择。在这种情况下,输入7个字符zong li
以获取中文字符。
我可以使用PreviewTextInput
解决此问题,因为当文本处于更改状态时事件不会触发。但是,按Enter键时会触发事件,但text string
为空,但再次按Enter键可以将正确的信息输入text string
。
有没有办法模拟按下的回车键,这样用户只需要输入一次?或者有更好的方法来实现这一目标吗?由于这是一个WPF应用程序,我宁愿坚持使用代码。
调用方法的简单代码,该方法执行我需要它执行的所有操作。我没有看到发布方法代码的必要性,因为问题在于此行TextBoxStr = SearchNameTxtCombo.Text;
在第一次输入时返回空字符串。如前所述,第二次按下将返回正确的string
值。
private void SearchNameTxtCombo_PreviewTextInput(object sender, RoutedEventArgs e)
{
if (SearchNameTxtCombo.IsKeyboardFocusWithin)
{
TextBoxStr = SearchNameTxtCombo.Text;
GetPartialNamesComboBox();
}
}
和XAML,
<ComboBox Name="SearchNameTxtCombo" Grid.Row="1" Grid.ColumnSpan="3"
IsEditable="True"
TextBoxBase.PreviewTextInput="SearchNameTxtCombo_PreviewTextInput"
Grid.Column="9" VerticalAlignment="Stretch" Margin="5,5,10,5"
DisplayMemberPath="Value" SelectedValuePath="Key"
SelectionChanged="SearchNameTxtCombo_SelectionChanged"
IsDropDownOpen="{Binding IsKeyboardFocusWithin, RelativeSource={RelativeSource Self}, Mode=OneWay}"
ItemsSource="{Binding UpdateSourceTrigger=PropertyChanged, Path=EmployeesNameNumberPairs}"
SelectedItem="{Binding UpdateSourceTrigger=PropertyChanged, Path=SelectedEmployee}">
</ComboBox>
TextBoxBase
用于XAML,因为combobox
在textbox
设置为true时使用IsEditable
。
当IsEditable等于false时,ComboBox使用a ContentPresenter显示当前选中的项目;的当 IsEditable等于true , TextBox 用于此目的 代替。