Использование ListBox в области фокусировки

Краткая история: ListBox внутри области фокуса не позволяет выбрать элемент.

Длинная история:

Я пытаюсь создать контекстно-зависимый виджет для ввода данных. У меня основная панель с несколькими полями. Ниже у меня есть панель с FocusManager.FocusScope = "True" . Эта панель будет заполнена соответствующим виджетом для поля, которое в данный момент находится в фокусе. Например, при выборе поля даты в нижней части экрана отобразится календарь.

У меня есть несколько элементов управления, которые требуют от пользователя выбора одного из множества значений из списка. Я помещаю ListBox в область фокуса, но не могу выбрать какие-либо элементы. Когда что-то выбрано (программно) и вы щелкаете ListBox, он отменяет выбор всего.

Я протестировал несколько событий, и он не улавливает события MouseDown, но улавливает события MouseMove. Он запускает GotFocus всякий раз, когда я нажимаю на элемент, но никогда не запускает LostFocus. Я не уверен, что это значит, но надеюсь, что это может быть полезно для тех, кто это читает.

Вот код, который я использую для отображения контекстно-зависимого виджета. В моем окне есть следующий код XAML:

<Grid x:Name="EntryWidget" FocusManager.IsFocusScope="True">
    <Grid.Resources>
        <ListBox x:Key="List" ItemsSource="{Binding}" />
    </Grid.Resources>
</Grid>

Я использую окно.Перенаправленное событие GotFocus для обновления виджета до соответствующего элемента управления, например:

private void Window_GotFocus(object sender, RoutedEventArgs e)
{
    FrameworkElement focus = (FrameworkElement)FocusManager.GetFocusedElement(this);
    EntryWidget.Children.Clear(); // Could this be the culprit?
    object tag = focus.Tag;
    if (tag != null)
    {
        if (EntryWidget.Resources.Contains(tag))
        {
            EntryWidget.Children.Add(EntryWidget.Resources[tag] as UIElement);
        }
    }
}

Итак:

  1. Есть ли способ заставить ListBox работать в пределах области фокуса?

  2. Или есть другой элемент управления списком, который работает лучше внутри области видимости?

  3. Или я использую неправильный подход, используя прицелы фокусировки? Мои требования: пользователь должен иметь возможность выбрать элемент из прокручиваемого списка, который будет вводить значение в текущее поле. Текущее поле не должно терять фокус.

7
задан Kendall Frey 10 January 2012 в 01:00
поделиться