diff --git a/src/Avalonia.Controls/DropDown.cs b/src/Avalonia.Controls/DropDown.cs index 847db8a089..4ac2b6f822 100644 --- a/src/Avalonia.Controls/DropDown.cs +++ b/src/Avalonia.Controls/DropDown.cs @@ -170,6 +170,7 @@ namespace Avalonia.Controls e.Handled = true; } } + base.OnPointerPressed(e); } @@ -199,18 +200,26 @@ namespace Avalonia.Controls private void PopupOpened(object sender, EventArgs e) { - var selectedIndex = SelectedIndex; - - if (selectedIndex != -1) - { - var container = ItemContainerGenerator.ContainerFromIndex(selectedIndex); - container?.Focus(); - } + TryFocusSelectedItem(); } private void SelectedItemChanged(AvaloniaPropertyChangedEventArgs e) { UpdateSelectionBoxItem(e.NewValue); + TryFocusSelectedItem(); + } + + private void TryFocusSelectedItem() + { + var selectedIndex = SelectedIndex; + if (IsDropDownOpen && selectedIndex != -1) + { + var container = ItemContainerGenerator.ContainerFromIndex(selectedIndex); + if (container != null && container.Focusable) + { + container.Focus(); + } + } } private void UpdateSelectionBoxItem(object item)