XamChart 使用从 ContentControl 派生的场景,其中是从 ChartCanvas 派生和从 Canvas 派生的 ScenePane。场景窗格包含用于标签的 AxisLabelsPane。
调整标签大小的挑战在于 ScenePane、ChartCanvas 和 AxisLabelsPane 都是内部的,并且为标签保留的大小是硬编码的。
您拥有的两个选项是获取 XamChart 的源代码并在源代码中更改它,或者使用反射来更改值。由于 XamChart 已被 Infragistics 淘汰,并且不会再有任何错误修复,我建议您获取源代码并在那里进行所需的更改。
如果您确实希望使用反射,则添加到 ChartRendered 事件时的以下逻辑将使图表底部的 x 轴标签的大小加倍,但不会阻止图表在标签顶部呈现搬家后:
Scene scene = this.AssociatedObject.Scene;
Type sceneType = typeof (Scene);
PropertyInfo scenePaneProperty = sceneType.GetProperty("ScenePane",
BindingFlags.GetProperty | BindingFlags.Instance |
BindingFlags.NonPublic);
Canvas scenePane = scenePaneProperty.GetValue(scene, null) as Canvas;
Type scenePaneType = scenePane.GetType();
Type chartCanvasType = scenePaneType.BaseType;
FieldInfo horizontalAxisLabelsPanel1FieldInfo = scenePaneType.GetField("_labelsHorizontal1",
BindingFlags.Instance | BindingFlags.NonPublic |
BindingFlags.GetField);
Canvas horizontalAxisLabelsPanel1 = horizontalAxisLabelsPanel1FieldInfo.GetValue(scenePane) as Canvas;
PropertyInfo relativePositionProperty = chartCanvasType.GetProperty("RelativePosition",
BindingFlags.NonPublic |
BindingFlags.Instance |
BindingFlags.GetProperty);
relativePositionProperty.SetValue(horizontalAxisLabelsPanel1, new Rect(0,70,100,30),null);