Xaml XamChart轴标签被切断

Xaml XamChart轴标签被切断,xaml,charts,infragistics,axis-labels,Xaml,Charts,Infragistics,Axis Labels,我正在和一些XamCharts在Blend 4,WPF中合作。图表数据通过.xml文件加载,但这不是问题所在 我的问题是轴标签被切断。因此,它决定切断标签,而不是减少条形图的空间。有没有办法增加标签相对于图形视觉所使用的空间量 我尝试过增加XamChart本身的大小,但这不必要地扩展了图表,破坏了我的布局 我只希望标签文本不被截断,不管图表占用多少空间。任何想法都将不胜感激,谢谢 XamChart使用的场景是从ContentControl派生的,其中有一个从ChartCanvas派生的Scene

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

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

我尝试过增加XamChart本身的大小,但这不必要地扩展了图表,破坏了我的布局

我只希望标签文本不被截断,不管图表占用多少空间。任何想法都将不胜感激,谢谢


XamChart使用的场景是从ContentControl派生的,其中有一个从ChartCanvas派生的ScenePane和一个从Canvas派生的ScenePane。Scenepane包含用于标签的AxisLabelsPane

调整标签大小的挑战是ScenePane、ChartCanvas和AxisLabelsPane都是内部的,为标签保留的大小是硬编码的

您有两个选择:获取XamChart的源代码并在源代码中更改它,或者使用反射更改值。由于XamChart已经被Infragistics公司退役,并且不会有更多的bug修复,我建议您获取源代码并在那里进行所需的更改

如果您确实希望使用反射,则在添加到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);