强制用户仅键入组合框项集合中包含的值
本文关键字:集合 包含 组合 用户 | 更新日期: 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
财产中到底有什么。祝您项目的其余部分好运。