From 298cc5db8bcf2ce191ef52f184e75fc70cc2eba2 Mon Sep 17 00:00:00 2001 From: rabbitism Date: Sun, 14 Sep 2025 19:20:16 +0800 Subject: [PATCH] feat: add CornerRadius property to MultiAutoCompleteBox and improve focus handling logic --- .../Controls/MultiAutoCompleteBox.axaml | 3 +++ .../Controls/AutoCompleteBox/MultiAutoCompleteBox.cs | 12 ++++-------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/Ursa.Themes.Semi/Controls/MultiAutoCompleteBox.axaml b/src/Ursa.Themes.Semi/Controls/MultiAutoCompleteBox.axaml index 598cd87..bb5faa0 100644 --- a/src/Ursa.Themes.Semi/Controls/MultiAutoCompleteBox.axaml +++ b/src/Ursa.Themes.Semi/Controls/MultiAutoCompleteBox.axaml @@ -5,6 +5,7 @@ + @@ -13,10 +14,12 @@ MinHeight="30" Padding="{DynamicResource TextBoxContentPadding}" VerticalAlignment="Stretch" + CornerRadius="{TemplateBinding CornerRadius}" Background="{DynamicResource TextBoxDefaultBackground}" BorderBrush="{DynamicResource TextBoxDefaultBorderBrush}"> diff --git a/src/Ursa/Controls/AutoCompleteBox/MultiAutoCompleteBox.cs b/src/Ursa/Controls/AutoCompleteBox/MultiAutoCompleteBox.cs index 1b02158..bf72a19 100644 --- a/src/Ursa/Controls/AutoCompleteBox/MultiAutoCompleteBox.cs +++ b/src/Ursa/Controls/AutoCompleteBox/MultiAutoCompleteBox.cs @@ -536,14 +536,11 @@ public partial class MultiAutoCompleteBox : TemplatedControl, IInnerContentContr if (selector != null) { // Check if it is already an IItemsSelector - adapter = selector as ISelectionAdapter; - if (adapter == null) - // Built in support for wrapping a Selector control - adapter = new MultiAutoCompleteSelectionAdapter(selector); + // Built in support for wrapping a Selector control + adapter = new MultiAutoCompleteSelectionAdapter(selector); } - if (adapter == null) adapter = nameScope.Find(ElementSelectionAdapter); - return adapter; + return adapter ?? nameScope.Find(ElementSelectionAdapter); } /// @@ -745,8 +742,7 @@ public partial class MultiAutoCompleteBox : TemplatedControl, IInnerContentContr // Check if we still have focus in the parent's focus scope if (GetFocusScope() is { } scope && (TopLevel.GetTopLevel(this)?.FocusManager?.GetFocusedElement() is not { } focused || - (focused != this && - focused is Visual v && !this.IsVisualAncestorOf(v)))) + (focused != this && focused is not ListBoxItem && focused is Visual v && !this.IsVisualAncestorOf(v)))) SetCurrentValue(IsDropDownOpenProperty, false); _userCalledPopulate = false;