[英]How do I limit user input in a combobox, So that u can only type words that are within the collection?
为了澄清我有一个组合框,其可观察的集合绑定到其itemsource属性。 我希望用户只能输入集合中存在的项目。 同时保持
IsTextSearchEnabled="true"
功能。 所以我一直在网上寻找一个如何做到这一点的例子。 直到现在我想我应该使用
<ComboBox TextInput="cbb1_TextInput" />
事件然后搜索集合。 但我虚弱的尝试不能维持自动完成功能,selectedindex混乱和其他不需要的行为。 因为我是wpf中的一个菜鸟,我想知道是否有只使用XAML部分的解决方案?
编辑:我尝试过这样的事情:
private void fase1cbb1_KeyUp(object sender, KeyEventArgs e)
{
ComboBox cb = (ComboBox)sender;
bool match = false;
TextBox tb = (TextBox)cb.Template.FindName("PART_EditableTextBox", cb);
if (tb.Text.Length > 0)
{
foreach (MenuItem MI in cb.Items)
{
if (MI.Text.StartsWith(tb.Text))
{
match = true; ;
}
}
if (!match)
{
int len = tb.Text.Length;
if (len > 0)
{
tb.Text = tb.Text.Substring(0, len - 1);
tb.SelectionStart = len;
}
}
}
}
但是一旦没有匹配,就没有更多的选定项目,也没有更多的自动完成/文本搜索。
thnx任何建议或例子。
如果你一直向下滚动到MSDN上的ComboBox文档的底部,你会发现有一个非常简单的答案:将你的ComboBox.IsEditable
设置为false。 用户仍然可以通过在框中键入前缀来选择编辑器中的项目,但是他们只能输入已经出现在列表中的值。
缺点是您没有获得任何正常的“TextBox”类似行为,特别是您无法将所选项目复制/粘贴到组合框之外。 如果这也是一个问题,请告诉我们,但这仍然是Windows中DropDownList样式ComboBox的典型行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.