C#WPF Combobox可编辑仅允许列表中的选项

Kry*_*anB 6 c# validation wpf combobox visual-studio

我有一个名字的组合框.我将框设置为可编辑,以便用户可以输入名称.我想要它,以便用户只能输入列表中已有的名称.当用户单击"保存"时,如果框中的框为空,​​则我希望该框显示红色验证边框.有没有办法做到这一点?

        <ComboBox IsEditable="True"
                  Grid.Column="2"
                  Grid.Row="1"
                  Margin="5,3,0,0"
                  Text="{Binding Model.Number}"
                  ItemsSource="{Binding DList}"
                  SelectedItem="{Binding Model.Number}"
                  IsEnabled="{Binding EnableComboBox}" 
                  VerticalAlignment="Top">
        </ComboBox>
Run Code Online (Sandbox Code Playgroud)

Sam*_*ami 6

如果我理解正确,您希望用户能够通过键入来选择现有列表项,但不能键入不在列表中的字符串。这可以通过以下方式完成:

<ComboBox IsEditable="False"></ComboBox>
Run Code Online (Sandbox Code Playgroud)

这将允许用户开始输入字符串,但您会丢失用于输入的文本框。

另一种方法是允许用户通过设置<ComboBox IsReadOnly="False" IsEditable="True">和处理例如LostFocus检查输入是否有效的事件来输入他们想要的任何内容。下面是一个例子:

private void ComboBox_LostFocus(object sender, RoutedEventArgs e)
    {
        bool allowed = false;
        foreach (ComboBoxItem it in comboBox.Items)
        {
            if (it.Content.ToString() == comboBox.Text)
            {
                allowed = true;
                break;
            }
        }

        if (!allowed)
        {
            MessageBox.Show("MISS!");
        }

        else
        {
            MessageBox.Show("HIT!");
        }
    }
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我无法快速设置边框颜色,但您可以从这里获得重点。此外,根据您的ComboBoxItem类型,您可能需要将 匹配comboBox.Text到某个属性。