【问题标题】:XamChart axis labels get cut offXamChart 轴标签被切断
【发布时间】:2012-12-05 14:38:11
【问题描述】:

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

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

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

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

Cut-off labels

【问题讨论】:

    标签: xaml charts infragistics axis-labels


    【解决方案1】:

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-06
      • 2014-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多