自定义C#WPF中AutoCompleteBox的drop box元素选择

时间:2014-07-16 23:18:52

标签: c# wpf visual-studio-2013 autocompletebox

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

我希望我的AutoCompleteBox能够输入以“;”分隔的多个文本元素。

例如,文本框可以包含:

Apple; Banana; Cat

我已经自定义了我的过滤方法,该方法会在用户输入“;”后启用新搜索。

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

例如,文本框首先有这个,下拉框中有“Banana”:

Apple; Ba

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

Banana

但我想文本框是这样的:

Apple; Banana

有没有办法覆盖下拉框的选择事件,以便它可以保留原始文本?或者,有没有其他方法可以做到这一点?非常感谢!

2 个答案:

答案 0 :(得分:0)

你可以使用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替换为{{ 1}}?你可以使用string.StartWith决定是否替换它。

答案 1 :(得分:0)

如果您可以访问telerik控制套件,则它具有自动完成控制功能。它实现了您开箱即用的所有功能。这是一个链接Telerik Auto Complete

作为旁注,我不为telerik工作,也没有从插件中得到任何东西。我真的很喜欢使用他们的产品!