/// <summary> /// 搜索条件更改回调 /// </summary> /// <param name="d"></param> /// <param name="e"></param> private static void OnSearchTextPropretyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { SearchableTextBox stb = d as SearchableTextBox; if (stb == null || !stb._canSearching) { return; } string searchKey = e.NewValue as string; if (string.IsNullOrEmpty(searchKey))//搜索关键字为空,不展示搜索popup { if (stb._popup != null) { stb._popup.IsOpen = false; } return; } if (stb.SearchItemsSource == null || stb.SearchItemsSource.Count == 0)//搜索源为空,显示无搜索结果 { if (stb._popup != null) { stb._popup.IsOpen = true; } if (stb._lstSearchResult != null) { stb._lstSearchResult.Visibility = Visibility.Collapsed; } return; } //根据关键字搜索匹配 IList <SearchModel> searchResultList = null; if (stb.SearchMethod != null) { searchResultList = stb.SearchMethod(searchKey, stb.SearchItemsSource); } else { searchResultList = stb.DefaultSearch(searchKey, stb.SearchItemsSource); } lock (stb) { stb.SearchResultCollection.Clear(); if (searchResultList != null && searchResultList.Count > 0) { foreach (SearchModel sm in searchResultList) { stb.SearchResultCollection.Add(sm); } } if (stb._popup != null) { stb._popup.IsOpen = true; } if (stb._lstSearchResult != null) { if (stb.SearchResultCollection.Count != 0) { stb._lstSearchResult.Visibility = Visibility.Visible; //每次重新搜索,从头开始展示 VirtualizingPanel virtualizingPanel = stb._lstSearchResult.GetItemsHost() as VirtualizingPanel; if (virtualizingPanel != null) { virtualizingPanel.CallEnsureGenerator(); virtualizingPanel.CallBringIndexIntoView(0); } ListBoxItem firstItem = (ListBoxItem)stb._lstSearchResult.ItemContainerGenerator.ContainerFromIndex(0); if (null != firstItem) { firstItem.UpdateLayout(); firstItem.BringIntoView(); } } else { stb._lstSearchResult.Visibility = Visibility.Collapsed; } } } }