void IRequireAfterAxesFinalized.AxesFinalized(IChartRenderContext icrc) { if (icrc.Type == RenderType.TransformsOnly) { return; } var mat = MatrixSupport.DataArea(CategoryAxis1, CategoryAxis2, icrc.SeriesArea, 4); var matmp = MatrixSupport.Multiply(mat.Item1, mat.Item2); _trace.Verbose($"{Name} matmp:{matmp} clip:{icrc.SeriesArea}"); var mt = new MatrixTransform() { Matrix = matmp }; StyleGenerator?.Reset(); foreach (var istate in ItemState) { if (istate.Element.DataContext is GeometryWith2OffsetShim <RectangleGeometry> gs) { gs.GeometryTransform = mt; } else { istate.Element.Data.Transform = mt; } if (StyleGenerator != null) { var style = StyleGenerator.For(new Category2StyleContext(CategoryAxis1, CategoryAxis2, this, new double[3] { istate.Value, istate.XValue, (istate as IProvideYValue).YValue })); if (style != null) { istate.Element.Style = style; } else { if (PathStyle != null) { BindTo(this, nameof(PathStyle), istate.Element, FrameworkElement.StyleProperty); } } } } StyleGenerator?.UpdateLegend(new Category2StyleContext(CategoryAxis1, CategoryAxis2, this, new double[0])); }