组合框没有获得焦点
Combobox doesn't get 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) 组合框不获得焦点,用户需要按一次 Tab 键才能看到组合框中闪烁的光标。
我怎样才能使这个工作?
这似乎是一个很大的痛苦,因为控件不打算以这种方式使用。即使您使初始逻辑起作用,也很难以合理的方式关闭可编辑标志。当用户输入与给定选项部分匹配的文本时,它将 select 表示选项。您如何知道 selection 是意外还是故意造成的,因此是否应将可编辑标志再次设置为 false?
会推荐额外的 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:这是一个使用 item/value 而不是索引的示例,即使有人决定 "other" 选项应该位于顶部,代码仍然会按预期工作,你的不会。)
我有一个不可编辑的组合框 (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) 组合框不获得焦点,用户需要按一次 Tab 键才能看到组合框中闪烁的光标。
我怎样才能使这个工作?
这似乎是一个很大的痛苦,因为控件不打算以这种方式使用。即使您使初始逻辑起作用,也很难以合理的方式关闭可编辑标志。当用户输入与给定选项部分匹配的文本时,它将 select 表示选项。您如何知道 selection 是意外还是故意造成的,因此是否应将可编辑标志再次设置为 false?
会推荐额外的 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:这是一个使用 item/value 而不是索引的示例,即使有人决定 "other" 选项应该位于顶部,代码仍然会按预期工作,你的不会。)