Combobox无法获得焦点

时间:2016-07-11 18:29:05

标签: c# wpf combobox focus

我有一个不可编辑的组合框(SupplierDropdown),我希望当用户选择列表中的最后一个值时,组合框应该变得可编辑,没有任何价值并自动为用户做好准备输入他们的价值。换句话说,一个可编辑的空白框,闪烁的光标已准备好输入。

这是我的代码:

private void SupplierDropdown_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (SupplierDropdown.SelectedIndex == SupplierDropdown.Items.Count - 1)
        {
            SupplierDropdown.IsEditable = true;
            SupplierDropdown.Text = "";
            SupplierDropdown.Focus();
        }
    }

然而,尽管组合框确实可编辑,但其余代码似乎不起作用:(a)组合框不能清除用户选择的值,(b)组合框没有& #39; t得到焦点,用户需要点击一次选项卡才能看到组合框中闪烁的光标。

我该如何做到这一点?

1 个答案:

答案 0 :(得分:1)

这似乎是一个很大的痛苦,因为控件并不打算以这种方式使用。即使您使初始逻辑工作,也很难以合理的方式关闭可编辑标志。当用户输入与给定选项部分匹配的文本时,它将选择所述选项。你怎么知道这个选择是由意外还是故意引起的,因此可编辑的标志是否应该再次设置为假?

建议额外的TextBox方案,您只需显示TextBox任何自定义值,只能在XAML中完成(如果您知道要触发的值),那么'没有必要。

<ComboBox Name="cb" SelectedValuePath="Content">
    <ComboBoxItem>A</ComboBoxItem>
    <ComboBoxItem>B</ComboBoxItem>
    <ComboBoxItem>Other</ComboBoxItem>
</ComboBox>
<TextBox>
    <TextBox.Style>
        <Style TargetType="TextBox">
            <Setter Property="Visibility" Value="Collapsed"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding SelectedValue, ElementName=cb}" Value="Other">
                    <Setter Property="Visibility" Value="Visible"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>

(PS:这是使用项目/值而不是索引的示例,即使有人决定&#34;其他&#34;选项应该在顶部,代码仍将按预期工作,你的不会。)