From f198710ce31eb9c3195fc0e317b6422ab4cc52b8 Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Wed, 22 Sep 2021 23:13:56 +0800 Subject: [PATCH] enhance(control): AutoCompleteTextBox support for setting selectedxxx props at initialization --- .../AutoCompleteTextBox.cs | 51 +++++++++++-------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/src/Shared/HandyControl_Shared/Controls/Input/AutoCompleteTextBox/AutoCompleteTextBox.cs b/src/Shared/HandyControl_Shared/Controls/Input/AutoCompleteTextBox/AutoCompleteTextBox.cs index 12ae0936..2f50a0bd 100644 --- a/src/Shared/HandyControl_Shared/Controls/Input/AutoCompleteTextBox/AutoCompleteTextBox.cs +++ b/src/Shared/HandyControl_Shared/Controls/Input/AutoCompleteTextBox/AutoCompleteTextBox.cs @@ -1,5 +1,4 @@ -using System; -using System.Windows; +using System.Windows; using System.Windows.Controls; using System.Windows.Input; using HandyControl.Data; @@ -41,32 +40,18 @@ namespace HandyControl.Controls _searchTextBox.PreviewKeyDown += SearchTextBoxKeyDown; _searchTextBox.TextChanged += SearchTextBoxTextChanged; } + + UpdateTextBoxBySelectedItem(_selectedItem); } protected override void OnSelectionChanged(SelectionChangedEventArgs e) { + base.OnSelectionChanged(e); + if (e.AddedItems.Count > 0) { _selectedItem = e.AddedItems[0]; - } - } - - protected override void OnDropDownClosed(EventArgs e) - { - base.OnDropDownClosed(e); - - if (ItemContainerGenerator.ContainerFromItem(_selectedItem) is AutoCompleteTextBoxItem boxItem) - { - ignoreTextChanging = true; - - _searchTextBox.Text = BindingHelper.GetString(boxItem.Content, DisplayMemberPath); - _searchTextBox.CaretIndex = _searchTextBox.Text.Length; - - ignoreTextChanging = true; - - Text = _searchTextBox.Text; - - ignoreTextChanging = false; + UpdateTextBoxBySelectedItem(_selectedItem); } } @@ -128,6 +113,11 @@ namespace HandyControl.Controls private void UpdateTextBoxBySelectedIndex(int selectedIndex) { + if (_searchTextBox == null) + { + return; + } + ignoreTextChanging = true; if (ItemContainerGenerator.ContainerFromIndex(selectedIndex) is AutoCompleteTextBoxItem boxItem) @@ -139,6 +129,25 @@ namespace HandyControl.Controls } } + private void UpdateTextBoxBySelectedItem(object selectedItem) + { + if (_searchTextBox == null) + { + return; + } + + ignoreTextChanging = true; + + _searchTextBox.Text = BindingHelper.GetString(selectedItem, DisplayMemberPath); + _searchTextBox.CaretIndex = _searchTextBox.Text.Length; + + ignoreTextChanging = true; + + Text = _searchTextBox.Text; + + ignoreTextChanging = false; + } + private void SearchTextBoxGotFocus(object sender, RoutedEventArgs e) { if (!string.IsNullOrEmpty(Text))