在Combobox的元素内容控件中提升PreviewKeyDown

时间:2015-11-22 09:19:24

标签: wpf combobox

我有一个multiselectCombobox。我想在按下键的同时打开它并专注于文本框。然后按下键,专注于项目来源中的项目。

我使用this。但我在弹出窗口中添加了一个文本框,用于搜索列表。

我在UserControl上添加PreviewKeyDown

private void UserControl_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Down)
        {
            var toggle = (ToggleButton)MultiSelectCombo.Template.FindName("ToggleButton", MultiSelectCombo);
            var txt = (TextBox)MultiSelectCombo.Template.FindName("searchTextBox", MultiSelectCombo);
            toggle.IsChecked = true;
            txt.Focus();
        }

    }

当控件为焦点且用户按下键,打开弹出窗口并对焦文本框时。

我想在文本框中按下键时聚焦项目,我提升了TextBox的PreviewKeyDown,但提高了UserControl的键,并专注于Textbox。

如何解决?

enter image description here

修改

我使用此代码但仅关注文本框。

enter image description here

1 个答案:

答案 0 :(得分:0)

PreviewKeyDown是隧道路由事件,因此在捕获UserControl之前,您无法捕获TextBox上的PreviewKeyDown。 所以,你应该建立像

这样的逻辑
private void UserControl_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (!ComboBoxTest.IsFocused)
    {
        ComboBoxTest.Focus();
    }
    else if (ComboBoxTest.IsFocused)
    {
    }
}