在c# WPF中自定义AutoCompleteBox的下拉框元素选择
本文关键字:元素 选择 AutoCompleteBox WPF 自定义 | 更新日期: 2023-09-27 18:13:25
我是WPF的新手,现在我正试图弄清楚如何自定义AutoCompleteBox。
我希望我的AutoCompleteBox能够输入几个以";"。
例如,文本框可以有:
Apple; Banana; Cat
我已经自定义了我的过滤器方法,它将在用户输入";"。
但令人讨厌的是,如果我从下拉框中选择一个元素,原始文本将被所选元素取代。
例如,文本框一开始有这个,下拉框中有"Banana":
Apple; Ba
然后在下拉框中选择Banana,旧的文本将被替换:
Banana
但是我希望文本框是这样的:
Apple; Banana
是否有一种方法可以覆盖下拉框的选择事件,以便它可以保留原始文本?或者,还有其他方法吗?非常感谢!
你可以使用selectionchanged事件,像这样:
<Grid>
<TextBox x:Name="txtInput" HorizontalAlignment="Left" Height="23" Margin="154,36,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="327"/>
<ComboBox x:Name="comboBox" HorizontalAlignment="Left" SelectionChanged="comboBox_SelectionChanged" Margin="154,64,0,0" VerticalAlignment="Top" Width="120">
<ComboBoxItem Content="Apple"/>
<ComboBoxItem Content="Pear"/>
<ComboBoxItem Content="Banana"/>
</ComboBox>
</Grid>
private void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if(comboBox.SelectedIndex > -1)
{
string tmp = txtInput.Text;
if (tmp.LastIndexOf(';') > 0)
{
txtInput.Text = tmp.Substring(0, tmp.LastIndexOf(';') + 1) + ((ComboBoxItem)comboBox.SelectedItem).Content;
}
else
{
txtInput.Text += ";" +((ComboBoxItem)comboBox.SelectedItem).Content;
}
}
}
这只是一个例子,你应该分析你的字符串并做一些事情,对于另一个例子:
在组合框中输入Apple;Ba
并选择Banana
,当然,将Ba替换为Banana。但是如果您选择了Pear
,您确定要将Ba
替换为Pear
吗?你可以使用字符串。StartWith决定是否替换
如果您可以访问远程控制套件,它有一个自动完成控制。它实现了您所概述的所有功能。这是一个链接teleerik Auto Complete
作为旁注,我不为telerik工作,也没有从插入它们中得到任何东西。我真的很喜欢使用他们的产品!