diff --git a/UI/Controls/Charts/Charts.cs b/UI/Controls/Charts/Charts.cs
index 667d973bdefebfb26f1099562ba96b585afd1ac1..bae1757366ba5b73a72f45cbdb5dd0bf234ed444 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 23bd17ec6ee0aa331e8a5c4c20f57e1b2e5fa349..42dbb2a020c30dab8152384a57d5d727f9506182 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">