diff --git a/src/Avalonia.Controls/DropDown.cs b/src/Avalonia.Controls/DropDown.cs
index 4ac2b6f822..a30cc231b7 100644
--- a/src/Avalonia.Controls/DropDown.cs
+++ b/src/Avalonia.Controls/DropDown.cs
@@ -190,6 +190,14 @@ namespace Avalonia.Controls
base.OnTemplateApplied(e);
}
+ internal void ItemFocused(DropDownItem dropDownItem)
+ {
+ if (IsDropDownOpen && dropDownItem.IsFocused && dropDownItem.IsArrangeValid)
+ {
+ dropDownItem.BringIntoView();
+ }
+ }
+
private void PopupClosed(object sender, EventArgs e)
{
if (Focusable)
diff --git a/src/Avalonia.Controls/DropDownItem.cs b/src/Avalonia.Controls/DropDownItem.cs
index fb465e93ec..1e22ededf6 100644
--- a/src/Avalonia.Controls/DropDownItem.cs
+++ b/src/Avalonia.Controls/DropDownItem.cs
@@ -2,43 +2,19 @@
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System;
+using System.Reactive.Linq;
namespace Avalonia.Controls
{
///
/// A selectable item in a .
///
- public class DropDownItem : ContentControl, ISelectable
+ public class DropDownItem : ListBoxItem
{
- ///
- /// Defines the property.
- ///
- public static readonly StyledProperty IsSelectedProperty =
- AvaloniaProperty.Register(nameof(IsSelected));
-
- ///
- /// Initializes static members of the class.
- ///
- static DropDownItem()
- {
- FocusableProperty.OverrideDefaultValue(true);
- }
-
public DropDownItem()
{
- this.GetObservable(DropDownItem.IsFocusedProperty).Subscribe(focused =>
- {
- PseudoClasses.Set(":selected", focused);
- });
- }
-
- ///
- /// Gets or sets the selection state of the item.
- ///
- public bool IsSelected
- {
- get { return GetValue(IsSelectedProperty); }
- set { SetValue(IsSelectedProperty, value); }
+ this.GetObservable(DropDownItem.IsFocusedProperty).Where(focused => focused)
+ .Subscribe(_ => (Parent as DropDown)?.ItemFocused(this));
}
}
}