我是WPF的新手,现在我正试图弄清楚如何自定义AutoCompleteBox。
我希望我的AutoCompleteBox能够输入以“;”分隔的多个文本元素。
例如,文本框可以包含:
Apple; Banana; Cat
我已经自定义了我的过滤方法,该方法会在用户输入“;”后启用新搜索。
但令人讨厌的是,如果我从下拉框中选择一个元素,原始文本将被所选元素替换。
例如,文本框首先有这个,下拉框中有“Banana”:
Apple; Ba
然后我在下拉框中选择“Banana”,旧文本将被替换:
Banana
但我想文本框是这样的:
Apple; Banana
有没有办法覆盖下拉框的选择事件,以便它可以保留原始文本?或者,有没有其他方法可以做到这一点?非常感谢!
答案 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工作,也没有从插件中得到任何东西。我真的很喜欢使用他们的产品!