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