在c# WPF中自定义AutoCompleteBox的下拉框元素选择

本文关键字:元素 选择 AutoCompleteBox WPF 自定义 | 更新日期: 2023-09-27 18:13:25

我是WPF的新手,现在我正试图弄清楚如何自定义AutoCompleteBox。

我希望我的AutoCompleteBox能够输入几个以";"。

例如,文本框可以有:

Apple; Banana; Cat

我已经自定义了我的过滤器方法,它将在用户输入";"。

但令人讨厌的是,如果我从下拉框中选择一个元素,原始文本将被所选元素取代。

例如,文本框一开始有这个,下拉框中有"Banana":

Apple; Ba

然后在下拉框中选择Banana,旧的文本将被替换:

Banana

但是我希望文本框是这样的:

Apple; Banana

是否有一种方法可以覆盖下拉框的选择事件,以便它可以保留原始文本?或者,还有其他方法吗?非常感谢!

在c# WPF中自定义AutoCompleteBox的下拉框元素选择

你可以使用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工作,也没有从插入它们中得到任何东西。我真的很喜欢使用他们的产品!