2014-07-16 59 views
0

我是WPF的新手,現在我正試圖弄清楚如何自定義AutoCompleteBox。自定義C#WPF中的AutoCompleteBox的下拉框元素選擇WPF

我希望我的AutoCompleteBox能夠輸入由「;」分隔的多個文本元素。

例如,文本框中可以有:

Apple; Banana; Cat 

我已經定製了自己的過濾方法,這將使用戶後,新的搜索進入「;」。

但令人討厭的是,如果我從下拉框中選擇一個元素,原始文本將被所選元素替換。

例如,文本框有這樣的第一,並下拉框中有它的「香蕉」:

Apple; Ba 

那麼,我選擇在下拉框中的「香蕉」,老文本將被替換:

Banana 

但我想文本框是這樣的:

Apple; Banana 

有T A方式o覆蓋下拉框的選擇事件,以便它可以保留原始文本?或者,還有其他方法可以做到這一點嗎?非常感謝!

回答

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代替爲香蕉。但是如果您選擇Pear,您確定要將Ba替換爲Pear?你可以使用string.StartWith決定是否替換它。

0

如果您可以訪問telerik控制套件,則它具有自動完成控制功能。它實現了您開箱即用的所有功能。這裏是一個鏈接Telerik Auto Complete

作爲一個側面說明我不爲telerik工作,也沒有得到任何東西堵塞他們。我真的很喜歡與他們的產品合作!