/// <summary> /// 重置排序条 /// </summary> private void ResetSortBars() { (GetView() as SortingCanvasView).Dispatcher.Invoke(DispatcherPriority.Normal, new System.Windows.Forms.MethodInvoker(delegate() { SortBarControls.Apply(x => x.InnerHeight = -1); })); }
/// <summary> /// 初始化画布。 /// </summary> public void InitCanvas(IList <int> data) { ResetIndexList(data.Count); //上左右留边距20 _sortBarHeight = ((GetView() as SortingCanvasView).ActualHeight - 20); _sortBarWidth = ((GetView() as SortingCanvasView).ActualWidth - 40 - data.Count()) / data.Count(); var minvalue = data.Min(); //高度增量(data每增加1),最小高度30,上边距20,去掉50 var delta = (_sortBarHeight - 50) / (data.Max() - minvalue); //如果已有同样数量的控件,不再次生成(在Clear动画执行时需要重新生成) if (SortBarControls.Count == data.Count && !_clearHandle) { for (var i = 0; i < data.Count(); i++) { SortBarControls[i].InnerHeight = GetInnerHeight(data[i], delta, minvalue); SortBarControls[i].Content = data[i]; SortBarControls[i].ToolTip = data[i]; SortBarControls[i].Left = 20 + i * (_sortBarWidth + 1); } } else { SortBarControls.Clear(); for (var i = 0; i < data.Count(); i++) { var bar = new SortBar() { Height = _sortBarHeight, Width = _sortBarWidth, Left = 20 + i * (_sortBarWidth + 1), Content = data[i], InnerHeight = GetInnerHeight(data[i], delta, minvalue), Index = i, ToolTip = data[i], }; bar.DeleteThis += delegate { SortBarControls.Remove(bar); }; SortBarControls.Add(bar); } } IndicatorControls = new ObservableCollection <SortBar>() { new SortBar() { Height = _sortBarHeight + 20, Width = _sortBarWidth, BorderThickness = new System.Windows.Thickness(1), BorderBrush = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FF5D8CD0")), Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FF5D8CD0")), Left = -1 * _sortBarWidth, Content = "A", VerticalContentAlignment = System.Windows.VerticalAlignment.Top, }, new SortBar() { Height = _sortBarHeight + 20, Width = _sortBarWidth, BorderThickness = new System.Windows.Thickness(1), BorderBrush = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFE28153")), Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFE28153")), Left = -1 * _sortBarWidth, Content = "B", VerticalContentAlignment = System.Windows.VerticalAlignment.Top, }, }; }