From 3f2a64cacac0d91062f0133596776afab3f227f2 Mon Sep 17 00:00:00 2001 From: noberumotto Date: Thu, 27 Oct 2022 00:19:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=88=97=E8=A1=A8=E9=A1=B5?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- UI/Controls/Charts/Charts.cs | 127 ++++++++++++++++--- UI/Resources/Themes/Dark/Charts/Charts.xaml | 31 ++++- UI/Resources/Themes/Light/Charts/Charts.xaml | 31 ++++- UI/Themes/Charts/Charts.xaml | 34 ++++- UI/Views/ChartPage.xaml | 2 +- UI/Views/DataPage.xaml | 6 +- 6 files changed, 197 insertions(+), 34 deletions(-) diff --git a/UI/Controls/Charts/Charts.cs b/UI/Controls/Charts/Charts.cs index 667d973..bae1757 100644 --- a/UI/Controls/Charts/Charts.cs +++ b/UI/Controls/Charts/Charts.cs @@ -17,6 +17,7 @@ using System.Windows.Shapes; using System.Windows.Threading; using UI.Controls.Base; using UI.Controls.Charts.Model; +using UI.Controls.Input; using UI.Extensions; namespace UI.Controls.Charts @@ -327,6 +328,23 @@ namespace UI.Controls.Charts new PropertyMetadata(false)); + #endregion + #region 是否显示搜索(仅列表样式有效,默认不显示) + /// + /// 是否显示搜索(仅列表样式有效,默认不显示) + /// + public bool IsSearch + { + get { return (bool)GetValue(IsSearchProperty); } + set { SetValue(IsSearchProperty, value); } + } + public static readonly DependencyProperty IsSearchProperty = + DependencyProperty.Register("IsSearch", + typeof(bool), + typeof(Charts), + new PropertyMetadata(false)); + + #endregion #region 选中列索引(仅柱状图有效) /// @@ -473,12 +491,33 @@ namespace UI.Controls.Charts /// private int lazyloadedCount = 0; private List lazyloadingData; + + /// + /// 搜索关键字(仅列表样式有效 + /// + private string searchKey; public Charts() { DefaultStyleKey = typeof(Charts); + SizeChanged += Charts_SizeChanged; Unloaded += Charts_Unloaded; } + protected override void OnRender(DrawingContext drawingContext) + { + base.OnRender(drawingContext); + ScrollViewer.Height = 1; + } + private void Charts_SizeChanged(object sender, SizeChangedEventArgs e) + { + if (ChartsType == ChartsType.HorizontalA) + { + var header = GetTemplateChild("AHeader") as Grid; + var h = ActualHeight - header.ActualHeight; + + ScrollViewer.Height = h; + } + } private void Charts_Unloaded(object sender, RoutedEventArgs e) { @@ -569,6 +608,9 @@ namespace UI.Controls.Charts } // 适当增加最大值 maxValue = Math.Round(maxValue / 2, MidpointRounding.AwayFromZero) * 2 + 2; + + var countText = GetTemplateChild("ACount") as Run; + countText.Text = Data.Count().ToString(); } } @@ -640,28 +682,72 @@ namespace UI.Controls.Charts lazyloadingData = null; isLazyloading = false; lazyloadedCount = 0; + ScrollViewer.ScrollToVerticalOffset(0); var data = Data.OrderByDescending(x => x.Value).ToList(); - - if (data.Count < 20) - { - RenderTypeAItems(data, 0, data.Count); - } - else - { - isLazyloading = true; - RenderTypeAItems(data, 0, 20); - lazyloadingData = data; - ScrollViewer.ScrollChanged += ScrollViewer_ScrollChanged; - } - + + + //if (data.Count < 20) + //{ + // RenderTypeAItems(data, 0, data.Count); + //} + //else + //{ + // isLazyloading = true; + // RenderTypeAItems(data, 0, 20); + // lazyloadingData = data; + // ScrollViewer.ScrollChanged += ScrollViewer_ScrollChanged; + //} + RenderTypeAItems(data, 0, data.Count); + + //Debug.WriteLine("【渲染】" + sw.ElapsedMilliseconds); if (IsCanScroll) { Container.SizeChanged -= Container_SizeChanged; Container.SizeChanged += Container_SizeChanged; } + isRendering = false; + + var searchBox = GetTemplateChild("ASearchBox") as InputBox; + searchBox.TextChanged += SearchBox_TextChanged; + } + + private void SearchBox_TextChanged(object sender, TextChangedEventArgs e) + { + var box = sender as InputBox; + if (box.Text != searchKey) + { + searchKey = box.Text.ToLower(); + HandleSearch(); + } + } + + private void HandleSearch() + { + Task.Run(() => + { + Dispatcher.Invoke(() => + { + foreach (var item in Container.Children) + { + var control = item as ChartsItemTypeA; + if (control != null) + { + var data = control.Data; + + bool show = false; + if (data.Name.ToLower().IndexOf(searchKey) != -1 || data.PopupText.ToLower().IndexOf(searchKey) != -1 || string.IsNullOrEmpty(searchKey)) + { + show = true; + } + control.Visibility = show ? Visibility.Visible : Visibility.Collapsed; + } + } + }); + + }); } private void Container_SizeChanged(object sender, SizeChangedEventArgs e) @@ -719,18 +805,19 @@ namespace UI.Controls.Charts } // 处理点击事件 HandleItemClick(chartsItem, item); - container.Children.Insert(lazyloadedCount, chartsItem); - + //container.Children.Insert(lazyloadedCount, chartsItem); + container.Children.Add(chartsItem); if (ShowLimit > 0 && Container.Children.Count == ShowLimit) { break; } - lazyloadedCount++; - if (i >= 20) - { - container.Children.RemoveAt(Container.Children.Count - 1); - } + //lazyloadedCount++; + //if (i >= 20) + //{ + // container.Children.RemoveAt(Container.Children.Count - 1); + //} } + } private void ChartsItem_Loaded(object sender, RoutedEventArgs e) diff --git a/UI/Resources/Themes/Dark/Charts/Charts.xaml b/UI/Resources/Themes/Dark/Charts/Charts.xaml index 23bd17e..42dbb2a 100644 --- a/UI/Resources/Themes/Dark/Charts/Charts.xaml +++ b/UI/Resources/Themes/Dark/Charts/Charts.xaml @@ -1,6 +1,6 @@  + xmlns:local="clr-namespace:UI.Controls.Charts" xmlns:base="clr-namespace:UI.Controls.Base" xmlns:converter="clr-namespace:UI.Controls.Converters" xmlns:input="clr-namespace:UI.Controls.Input">