none
ComboBox 选项的问题 RRS feed

  • 问题

  • ComboBox的选择框打开后,鼠标在上面的选项可以有一个高亮的效果, 按上下键也可以移动这个高亮

    但是这个高亮的选项不是SelectedItem。

    怎么获取到这个高亮的选项?是ComboBox的什么属性?

     

    2012年5月31日 8:08

答案

  • 要实现 AutoCompleteTextBox, 这里有几个已有的方案:

    1. WPF Toolkit 中的 AutoCompleteBox :http://wpf.codeplex.com
    2. http://wpfactb.codeplex.com/
    3. http://www.codeproject.com/Articles/26535/WPF-Autocomplete-Textbox-Control

    ------------------------------------------------------------------------------

    怎么获取到这个高亮的选项?是ComboBox的什么属性?

    不是ComboBox什么属性,需要我们遍历ComboBox中的ItemContainer才可以获得:

          for (int i = 0; i < combobox.Items.Count; i++)
          {
            if ((combobox.ItemContainerGenerator.ContainerFromIndex(i) as ComboBoxItem).IsHighlighted)
            {
              //...
            }
          }

    ---------------------------------------------------------------------------------

    把ComboBox默认模板导出,我们可以看到,在IsEditable=true下,编辑框为名字是 PART_EditableTextBox 的TextBox, 则我们可以通过可视树找到这个TextBox 控制他的显示。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 小携 2012年6月4日 7:00
    2012年6月1日 5:11
    版主

全部回复

  • IsEditable="True" 的时候  按上下键  切换高亮的时候   怎么让文本不要更着改变?

    还有选择框第一次打开的时候 不要让文本内容不要被选中状态

    void _MyAutoCompleteTextbox_Loaded(object sender, RoutedEventArgs e)
            {
                smartKeyBoradDir = program.mtxtoolkit.smartKeyBoardDir;
                smartKeyBorad = smartKeyBoradDir.query(this);
                comboBox.ItemsSource = smartKeyBorad.curQueryData;
            }
    
            private void PART_EditableTextBox_TextChanged(object sender, TextChangedEventArgs e)
            {
                TextBox tb = sender as TextBox;
    
                smartKeyBorad.updateSearchCondition(tb.Text);
    
                comboBox.SelectedIndex = -1;
                comboBox.IsDropDownOpen = comboBox.HasItems;
            }
    大体是想实现 silverlight的AutoCompleteTextbox


    • 已编辑 小携 2012年6月1日 3:03
    2012年6月1日 2:38
  • 要实现 AutoCompleteTextBox, 这里有几个已有的方案:

    1. WPF Toolkit 中的 AutoCompleteBox :http://wpf.codeplex.com
    2. http://wpfactb.codeplex.com/
    3. http://www.codeproject.com/Articles/26535/WPF-Autocomplete-Textbox-Control

    ------------------------------------------------------------------------------

    怎么获取到这个高亮的选项?是ComboBox的什么属性?

    不是ComboBox什么属性,需要我们遍历ComboBox中的ItemContainer才可以获得:

          for (int i = 0; i < combobox.Items.Count; i++)
          {
            if ((combobox.ItemContainerGenerator.ContainerFromIndex(i) as ComboBoxItem).IsHighlighted)
            {
              //...
            }
          }

    ---------------------------------------------------------------------------------

    把ComboBox默认模板导出,我们可以看到,在IsEditable=true下,编辑框为名字是 PART_EditableTextBox 的TextBox, 则我们可以通过可视树找到这个TextBox 控制他的显示。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 小携 2012年6月4日 7:00
    2012年6月1日 5:11
    版主