强制用户仅键入组合框项集合中包含的值

本文关键字:集合 包含 组合 用户 | 更新日期: 2023-09-27 18:36:53

我刚刚在这个网站上找到了一个帖子,回答者试图回答一个类似的问题。该帖子的链接是:WPF ComboBox with IsEditable="True" - 如何指示未找到匹配项?

因此,我尝试按照用户1234567的答案1主题4进行操作。我最终遇到了错误。

1) 列表不包含 ElementAt 的定义。在下面的一行:

if(textBox.Text != "" && items.ElementAt(i).StartsWith(textBox.Text))

我试图使用以下行来解决该错误:

if(textBox.Text != "" && items[i].StartsWith(textBox.Text))

因此,所有编译时错误都会消失。

2)我在下面提到的行上收到运行时错误:

items.Add(((ComboBoxItem)cbEffectOn.Items.GetItemAt(i)).Content.ToString());

错误说:Cannot convert string to ComboBoxItem.

如果你们中的任何人有更好的解决方案或可以解决上述错误,请提出建议。

更新

下面是组合框的 XAML:

<ComboBox x:Name="cbEffectOn" IsEditable="True" 
            ItemsSource="{Binding Path=EffectName, 
            Mode=TwoWay, UpdateSourceTrigger=Default}" 
            Grid.Column="4" Grid.Row="5" KeyUp="myComboBox_KeyUp"/>

更新 2

这是第二个问题的解决方案:

我试图在第一次尝试时对ComboBoxItem施放string。但是现在我知道ComboBox中的所有项目都是string的,所以我尝试了以下代码并且它有效:

items.Add(cbEffectOn.Items.GetItemAt(i).ToString());

强制用户仅键入组合框项集合中包含的值

当您遇到这样的错误时,您可以按照这个简单的建议来修复它们。您的第一个错误说List不包含ElementAt的定义。若要解决此问题,请转到 MSDN 网站并搜索"ElementAt方法"...事实上,你甚至可以在任何搜索引擎中搜索它,你应该在结果的顶部看到一个MSDN页面......在本例中,为"Enumerable.ElementAt<TSource>方法"页。

单击链接将带您进入该页面,您将在其中看到 ElementAt 方法位于 System.Linq 命名空间中,因此接下来要做的是检查是否已将其添加到代码中:

using System.Linq;

对于下一个错误,无法将string转换为ComboBoxItem,您需要做的就是查看您的代码:

items.Add(((ComboBoxItem)cbEffectOn.Items.GetItemAt(i)).Content.ToString());

你显然是在试图向ComboBoxItem投掷一些东西......但是错误说这是一个string.如果我们再看一遍,我们可以看到 ToString() 方法,它将值转换为string......所以也许我们应该删除它?

items.Add(((ComboBoxItem)cbEffectOn.Items.GetItemAt(i)).Content);

当然,这可能也行不通,这取决于您在Content财产中到底有什么。祝您项目的其余部分好运。