我有一个问题,可编辑的组合框。我可以得到文本框PART_EditableTextBox,并使其多行AcceptsReturn="True"和TextWrapping ="Wrap".
我的问题是我不能使它像经典文本框一样工作,用于文本操作。
例如,按下键不会在文本中导航,而只是启动项目选择,即使我的集合中只有一个项目,它也会有效地刷新到原始值。滚动条也一样。
我发现我可以捕捉一些事件(previewkeydown在父元素/PreviewMouseWheel),并处理它们不重置值,但仍然缺少文本导航(通过箭头在文本中移动)或有滚动条。
编辑
我找到解决办法了。
我没有使用ComboBox,而是使用DevExpress中的ComboBoxEdit。现在它变得相当容易,因为他们已经实现了属性来解决我一半的问题。
this.ComboBoxEdit。AllowSpinOnMouseWheel = false
this.ComboBoxEdit。
this.ComboBoxEdit.;
剩下的唯一问题是文本导航的箭头。我从父元素捕获PreviewKeyDown并实现了这个
private void Grid_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.OriginalSource is TextBox tx)
{
if (e.Key == Key.Up)
{
EditingCommands.MoveUpByLine.Execute(null, tx);
e.Handled = true;
}
else if (e.Key == Key.Down)
{
EditingCommands.MoveDownByLine.Execute(null, tx);
e.Handled = true;
}
}
}
我觉得这个计划似乎不是个好主意。
在一个可编辑的组合框提供的功能和你似乎从一个多行文本框中需要的功能之间存在根本的不匹配。
首先,箭头已经具有组合框的固有含义。以上就是使用键盘浏览自动完成列表的方法。
一个可编辑的组合框的目的是做自动完成,以及可能添加一个新的项目。
也许你可以有一个文本框和一个组合框。用户使用切换按钮或类似的东西在这些之间切换。这取决于他们是想添加新项还是查找现有项。
我认为你最好的办法可能是建立你自己的usercontrol,如果你特别需要它看起来像一个组合框。
可编辑的部分将是一个文本框。
选项列表可以是弹出框或展开框中的列表框。
你可以选择是否使用切换按钮来显示你的弹出框,就像组合框一样。
添加您需要的功能,而不会出现组合框控件固有的功能所带来的问题。