После выбора объекта 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
}
Не устанавливать фокус на 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();
}