XamChart轴标签被切断

时间:2012-12-18 11:39:00

标签: xaml charts infragistics axis-labels

我正在使用Blend 4中的一些XamCharts,WPF。图表数据通过.xml文件加载,但这不是问题。

我的问题是轴标签被切断了。因此,它不会为条形图使用更少的空间,而是决定切断标签。有没有办法增加标签相对于图形视觉效果使用的空间量?

我已经尝试过增加XamChart本身的大小,但这会不必要地拉伸图表,搞砸了我的布局!

我想要的只是标签文字不会被切断,无论图表占用多少空间。任何想法将不胜感激,谢谢!

Cut-off labels

1 个答案:

答案 0 :(得分:0)

XamChart正在使用一个派生自ContentControl的Scene,其中一个ScenePane派生自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);