-1

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

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

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

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

切断标签

4

1 回答 1

0

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);
于 2013-01-08T16:14:24.417 回答