wpf 可筛选下拉框

using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls.Primitives;
using System.Windows.Input;

namespace WpfApp25
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            var nameList = new List<string>
            {
                "A0-Word","B0-Word","C0-Word",
                "A1-Word","A111","A11122","B1-Word","C1-Word",
                "B2-Word","C2-Word",
                "C3-Word",
            };

            comboBox1.DataContext = nameList;
            comboBox1.SelectedValue = "aaa";
            comboBox1.Loaded += delegate
            {
                System.Windows.Controls.TextBox textBox = comboBox1.Template.FindName("PART_EditableTextBox", comboBox1) as System.Windows.Controls.TextBox;
                Popup popup = comboBox1.Template.FindName("PART_Popup", comboBox1) as Popup;
                if (textBox != null)
                {
                    textBox.KeyUp += (s, e) =>
                    {
                        if (e.Key == Key.Down)
                        {
                            if (comboBox1.SelectedIndex==comboBox1.Items.Count-1)
                            {
                                return;
                            }
                            comboBox1.SelectedIndex += 1;
                            return;
                        }
                        else if (e.Key==Key.Up)
                        {
                            if (comboBox1.SelectedIndex==-1)
                            {
                                return;
                            } 
                            comboBox1.SelectedIndex -= 1;
                            return;
                        }
                        comboBox1.Items.Filter += (item) =>
                        {  string unSelected = textBox.Text;
                            if (!string.IsNullOrEmpty(textBox.SelectedText) )
                            {
                              unSelected = textBox.Text.Replace(textBox.SelectedText, "");
                            } 
                            if (item.ToString().ToLower().Contains(unSelected.ToLower()))
                            {
                                popup.IsOpen = true;
                                return true;

                            }
                            else
                            {
                                return false;
                            }
                        };
                    };
                }
            };

            //  comboBox1.KeyDown += new System.Windows.Input.KeyEventHandler(comboBox1_KeyDown);

        }

        private void comboBox1_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {

            if (e.Key == Key.Down)
            {
                e.Handled = true;

            }
        }
    }
}
<Window x:Class="WpfApp25.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp25"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <ComboBox Name="comboBox1"
                  IsEditable="true"
                  Width="200"
                  Height="50"
                  ItemsSource="{Binding}"> 
        </ComboBox>
    </Grid>
</Window>
原文地址:https://www.cnblogs.com/congqiandehoulai/p/12721514.html