public ConditionalFormatView(Cell bindingCell) { Margin = new Thickness(1.0); UseLayoutRounding = true; _bindingCell = bindingCell; _axisCanvas = new Canvas(); Line line = new Line(); line.StrokeThickness = 1.0; line.StrokeDashArray = new DoubleCollection { 2.0, 1.0 }; _axisLine = line; _axisCanvas.Children.Add(_axisLine); Children.Add(_axisCanvas); _databarObject = null; _dataBarRectangle = new Rectangle(); _dataBarRectangle.UseLayoutRounding = true; Children.Add(_dataBarRectangle); _dataBarBackground = new LinearGradientBrush(); GradientStop stop = new GradientStop(); stop.Color = Colors.Transparent; stop.Offset = 0.0; _cachedGradientStart = stop; _dataBarBackground.GradientStops.Add(_cachedGradientStart); GradientStop stop2 = new GradientStop(); stop2.Color = Colors.Transparent; stop2.Offset = 0.0; _cachedGradientEnd = stop2; _dataBarBackground.GradientStops.Add(_cachedGradientEnd); GradientStop stop3 = new GradientStop(); stop3.Color = Colors.Transparent; stop3.Offset = 0.0; _cachedGradientTransparentEnd = stop3; _dataBarBackground.GradientStops.Add(_cachedGradientTransparentEnd); _dataBarBackground.EndPoint = new Point(1.0, 0.0); _dataBarRectangle.Fill = _dataBarBackground; _iconObject = null; _imageContainer = new Border(); _imageContainer.Style = null; _cachedImage = new Image(); _cachedImage.HorizontalAlignment = HorizontalAlignment.Left; _imageContainer.Child = _cachedImage; }
public async void SetIconObject(IconDrawingObject iconObject, float zoomFactor, Cell bindingCell) { if (!object.Equals(_iconObject, iconObject)) { if (iconObject != null) { _cachedImage.Source = await ConditionalFormatIcons.GetIconSource(iconObject.IconSetType, iconObject.IndexOfIcon); } else { ClearIcon(); } _iconObject = iconObject; InvalidateMeasure(); InvalidateArrange(); } if ((_iconObject != null) && (_cachedImage != null)) { HorizontalAlignment left = HorizontalAlignment.Left; if (_iconObject.ShowIconOnly) { switch (bindingCell.ActualHorizontalAlignment) { case CellHorizontalAlignment.Center: left = HorizontalAlignment.Center; break; case CellHorizontalAlignment.Right: left = HorizontalAlignment.Right; break; } } _cachedImage.HorizontalAlignment = left; VerticalAlignment alignment2 = bindingCell.ActualVerticalAlignment.ToVerticalAlignment(); _cachedImage.VerticalAlignment = alignment2; } if (_cachedZoomFactor != zoomFactor) { _cachedImage.Width = (double)(16f * zoomFactor); _cachedImage.Height = (double)(16f * zoomFactor); _cachedZoomFactor = zoomFactor; InvalidateMeasure(); InvalidateArrange(); } }
//*** CellsPanel.Measure -> RowsLayer.Measure -> RowItem.UpdateChildren -> 行列改变时 CellItem.UpdateChildren -> RowItem.Measure -> CellItem.Measure ***// public void UpdateChildren() { // 刷新绑定的Cell int row = OwnRow.Row; int column = Column; if (CellLayout != null) { row = CellLayout.Row; column = CellLayout.Column; } BindingCell = OwnRow.OwnPanel.CellCache.GetCachedCell(row, column); if (BindingCell == null) { return; } Background = BindingCell.ActualBackground; var excel = Excel; Worksheet sheet = BindingCell.Worksheet; // 迷你图 Sparkline sparkline = sheet.GetSparkline(row, column); if (_sparkInfo != sparkline) { SparkLine = sparkline; SynSparklineView(); } // 收集所有DrawingObject List <DrawingObject> list = new List <DrawingObject>(); DrawingObject[] objArray = sheet.GetDrawingObject(row, column, 1, 1); if ((objArray != null) && (objArray.Length > 0)) { list.AddRange(objArray); } IDrawingObjectProvider drawingObjectProvider = DrawingObjectManager.GetDrawingObjectProvider(excel); if (drawingObjectProvider != null) { DrawingObject[] objArray2 = drawingObjectProvider.GetDrawingObjects(sheet, row, column, 1, 1); if ((objArray2 != null) && (objArray2.Length > 0)) { list.AddRange(objArray2); } } _dataBarObject = null; _iconObject = null; _customDrawingObject = null; if (list.Count > 0) { foreach (DrawingObject obj in list) { if (obj is DataBarDrawingObject bar) { _dataBarObject = bar; } else if (obj is IconDrawingObject icon) { _iconObject = icon; } else if (obj is CustomDrawingObject cust) { _customDrawingObject = cust; } } } bool noBarIcon = SynContitionalView(); bool noCust = SynCustomDrawingObjectView(); if (sparkline == null && noBarIcon && noCust && !string.IsNullOrEmpty(BindingCell.Text)) { _tb.Text = BindingCell.Text; ApplyStyle(); } else { _tb.ClearValue(TextBlock.TextProperty); } SynStrikethroughView(); #if UWP || WASM // 手机上体验不好 if (!excel.IsTouching) { FilterButtonInfo info = excel.GetFilterButtonInfo(row, column, BindingCell.SheetArea); if (info != FilterButtonInfo) { FilterButtonInfo = info; SynFilterButton(); } } #endif }