C# WPF 组合框可编辑只允许列表中的选项

标签 c# wpf visual-studio validation combobox

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

        <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>

最佳答案

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

<ComboBox IsEditable="False"></ComboBox>

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

另一种方法是允许用户通过设置 <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!");
        }
    }

出于某种原因,我无法快速设置边框颜色,但您可以从这里了解要点。也取决于你的 ComboBoxItem类型,您可能需要匹配 comboBox.Text到某个属性。

关于C# WPF 组合框可编辑只允许列表中的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42162294/

相关文章:

c++ - 使用公共(public) PRNG 和统一分布 (C++17)

.net - Visual Studio 2013 中的内存分析

c# - 了解 WPF 派生 WIndow 类

C# Com Interop 与 Windows Media Player 可视化(带有示例代码)

c# - 在 C# 中以编程方式使用 cmd.exe

c# - 使用 C# 将新词添加到 Windows 语音识别

c# - 在 WPF 中使用超链接的示例

wpf - 如何在 WPF 中为用户控件创建用户定义(新)事件?一个小示例

c++ - 如何以编程方式检查 VC++ 中的 Internet 带宽?

DataReader 循环查询中的 C# MySQL 查询