Установка внимания на объект ListBox повреждает перемещение с помощью клавиатуры

После выбора объекта ListBox программно необходимо нажать down\up ключевые два раза для перемещения выбора. Какие-либо предложения?

Посмотреть:

<ListBox Name="lbActions" Canvas.Left="10" Canvas.Top="10"
               Width="260" Height="180">
        <ListBoxItem Name="Open" IsSelected="true" Content="Open"></ListBoxItem>
        <ListBoxItem Name="Enter" Content="Enter"></ListBoxItem>
        <ListBoxItem Name="Print" Content="Print"></ListBoxItem>
</ListBox>

Код:

public View()
{
   lbActions.Focus();
   lbActions.SelectedIndex = 0; //not helps
   ((ListBoxItem) lbActions.SelectedItem).Focus(); //not helps either
}
9
задан H.B. 5 July 2012 в 20:58
поделиться

1 ответ

Не устанавливать фокус на ListBox ... установить фокус на выбранный ListBoxItem. Это решит проблему «требуются два нажатия клавиатуры»:

if (lbActions.SelectedItem != null)
    ((ListBoxItem)lbActions.SelectedItem).Focus();
else
    lbActions.Focus();

Если ваш ListBox содержит что-то еще, кроме ListBoxItem s, вы можете использовать lbActions.ItemContainerGenerator.ContainerFromIndex (lbActions.SelectedIndex) чтобы получить автоматически сгенерированный ListBoxItem .


Если вы хотите, чтобы это происходило во время инициализации окна , вам нужно поместить код в событие Loaded , а не в конструктор. Пример (XAML):

<Window ... Loaded="Window_Loaded">
    ...
</Window>

Код (на основе примера в вашем вопросе):

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        lbActions.Focus();
        lbActions.SelectedIndex = 0;
        ((ListBoxItem)lbActions.SelectedItem).Focus();
    }
13
ответ дан 4 December 2019 в 14:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: