diff --git a/src/Ursa.Themes.Semi/Controls/MultiComboBox.axaml b/src/Ursa.Themes.Semi/Controls/MultiComboBox.axaml
new file mode 100644
index 0000000..96fe32a
--- /dev/null
+++ b/src/Ursa.Themes.Semi/Controls/MultiComboBox.axaml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Ursa/Controls/ComboBox/MultiComboBox.cs b/src/Ursa/Controls/ComboBox/MultiComboBox.cs
new file mode 100644
index 0000000..3bdba24
--- /dev/null
+++ b/src/Ursa/Controls/ComboBox/MultiComboBox.cs
@@ -0,0 +1,47 @@
+using System.Collections.ObjectModel;
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Controls.Primitives;
+using Avalonia.Controls.Templates;
+
+namespace Ursa.Controls;
+
+public class MultiComboBox: SelectingItemsControl
+{
+ private ComboBox _box;
+
+ private static ITemplate _defaultPanel = new FuncTemplate(() => new VirtualizingStackPanel());
+
+ public static readonly StyledProperty IsDropDownOpenProperty =
+ ComboBox.IsDropDownOpenProperty.AddOwner();
+
+ public bool IsDropDownOpen
+ {
+ get => GetValue(IsDropDownOpenProperty);
+ set => SetValue(IsDropDownOpenProperty, value);
+ }
+
+ static MultiComboBox()
+ {
+ FocusableProperty.OverrideDefaultValue(true);
+ ItemsPanelProperty.OverrideDefaultValue(_defaultPanel);
+ }
+
+ protected override bool NeedsContainerOverride(object? item, int index, out object? recycleKey)
+ {
+ return NeedsContainer(item, out recycleKey);
+ }
+
+ protected override Control CreateContainerForItemOverride(object? item, int index, object? recycleKey)
+ {
+ return new MultiComboBoxItem();
+ }
+
+ internal void ItemFocused(MultiComboBoxItem dropDownItem)
+ {
+ if (IsDropDownOpen && dropDownItem.IsFocused && dropDownItem.IsArrangeValid)
+ {
+ dropDownItem.BringIntoView();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Ursa/Controls/ComboBox/MultiComboBoxItem.cs b/src/Ursa/Controls/ComboBox/MultiComboBoxItem.cs
new file mode 100644
index 0000000..8eaf26a
--- /dev/null
+++ b/src/Ursa/Controls/ComboBox/MultiComboBoxItem.cs
@@ -0,0 +1,18 @@
+using Avalonia;
+using Avalonia.Controls;
+using Irihi.Avalonia.Shared.Helpers;
+
+namespace Ursa.Controls;
+
+public class MultiComboBoxItem: ListBoxItem
+{
+ public MultiComboBoxItem()
+ {
+ this.GetObservable(IsFocusedProperty).Subscribe(a=> {
+ if (a)
+ {
+ (Parent as MultiComboBox)?.ItemFocused(this);
+ }
+ });
+ }
+}
\ No newline at end of file