Синхронизировать выделение клавиатуры с SelectedItem в ListBox - PullRequest
0 голосов
/ 16 декабря 2009

При использовании Silverlight ListBox я могу программно выбирать элемент, назначая его для SelectedItem или SelectedIndex, и я могу гарантировать, что выбранный элемент виден пользователю, используя метод ScrollIntoView.

При этом элемент выбран правильно (фон этого элемента синий), но фокус клавиатуры остается на первом элементе в списке (первый элемент имеет пунктирную границу). В результате, когда пользователь нажимает вверх или вниз, чтобы изменить выбор, выбор переходит наверх.

Как изменить «сфокусированный» элемент в элементе управления ListBox, чтобы он соответствовал элементу, который я только что программно выбрал?

1 Ответ

2 голосов
/ 19 декабря 2009

Попробуйте вызвать мою пользовательскую функцию настройки фокуса (FocusEx) на вашем списке после желаемых событий из контейнера списка (на Loaded и т. Д.).

internal static class ControlExt
{
    // Extension for Control
    internal static bool FocusEx(this Control control)
    {
        if (control == null)
            return false;

        bool success = false;
        if (control == FocusManager.GetFocusedElement())
            success = true;
        else
        {
            // To get Focus() to work properly, call UpdateLayout() immediately before
            control.UpdateLayout();
            success = control.Focus();
        }

        ListBox listBox = control as ListBox;
        if (listBox != null)
        {
            if (listBox.SelectedIndex < 0 && listBox.Items.Count > 0)
                listBox.SelectedIndex = 0;
        }

        return success;
    }
}

Это должно работать для вас.

Удачи,Джим МакКарди YinYangMoney

...