【问题标题】:Remove all space between Devexpress ChartControl panes删除 Devexpress ChartControl 窗格之间的所有空间
【发布时间】:2017-02-10 15:35:56
【问题描述】:

我目前正在使用一个 DevExpress ChartControl,它有几个垂直堆叠的窗格。窗格可以在运行时单独显示或隐藏,但它们的内容在创建后不会改变。我想删除窗格之间的所有空间,以便每个窗格的边框与其上方/下方的窗格边框完全齐平。

我已经使用以下代码将 PaneDistance 设置为 0,这通常会完全符合我的要求:
XYDiagram diagram = chartControl1.Diagram as XYDiagram; diagram.PaneDistance = 0;

但是,我遇到的问题(在下面的屏幕显示中可见)是我的 y 轴上的标签有时会在窗格本身的边缘上方或下方垂直延伸,这迫使我的窗格之间存在空间.

前两个窗格之间根本没有空间,这正是我想要的,但问题可以在底部的 whree 窗格中看到。第二个窗格上的“0”标签略微延伸到表格下方,因此添加了空白空间以使其适合。底部的两个轴具有延伸到其窗格之外的标签,因此甚至添加了更多空间

我已经尝试编辑我能想到的这些轴的每个属性,但没有任何东西能够删除这个空白区域。似乎只是让外部标签被向上或向下推,因此它们在窗格高度内应该可以解决问题。任何人都对我如何让这个工作正常工作有任何想法?

编辑:我会提到,在这个应用程序的不同部分,我有一组不同的面板,它们水平旋转和对齐,它们的轴标签做我想让他们做的事情上例:

您可以看到“0”和“300”标签稍微偏离中心以适应它们自己的窗格,因此它们不会向外延伸并创建空白空间。我不必触摸任何代码来实现这一点。可能是因为这些都是同一个轴的实例,而那些不这样做的则是不同的轴,导致它们在这种情况下玩得很好?

编辑 2:

这是我将轴 SideMarginsValues 设置为 0 并将 AlwaysShowZeroLevel 设置为 false 后得到的结果。越来越近了!

【问题讨论】:

    标签: c# devexpress


    【解决方案1】:

    如果您无法使用 DX 图表的公共属性实现所需的功能,您仍然可以尝试一种技巧。

    在浏览器中选择检查图表区域(在 Chrome 中为 CTRL+SHIFT+I)并找到实际图表的元素或父元素,然后查看 DX 分配给它们的类/ID。

    然后选择最近的元素类/id并尝试通过分配负边距/填充来使用它的css:

    .dxtcLite.dxtc-top .dxtc-stripContainer {
            margin-botton: -2px!important;
    }
    

    这当然是一个肮脏的解决方案,但有时它是唯一有效的解决方案。

    但是,如果您在图表窗格之间没有任何 HTML 类型的边距/填充,但空白区域实际上是生成的图表图像的一部分,那么您可能唯一能做的就是继续使用 DX 图表影响实际图表图像生成的属性。

    更新:

    您是否尝试将 Range.SideMarginsValue 属性设置为 0?

    diagram.AxisY.WholeRange.SideMarginsValue = 0;
    

    另一种选择是尝试始终使用隐藏 0 级轴标签 WholeRange.AlwaysShowZeroLevel

    diagram.AxisY.WholeRange.AlwaysShowZeroLevel = false; 
    

    或尝试设置轴值的最大值以排除边框标签:

    // depending on possible min/max values for each pane 
    diagram.AxisY.WholeRange.SetMinMaxValues(5,  35 ); 
    

    如果以上任何内容有帮助,请告诉我。

    【讨论】:

    • 将 SideMarginsValue 设置为 0 和 AlwaysShowZeroLevels 的组合非常接近我想要的!较低的 0 标签的问题已解决,但不幸的是,较高的标签(如我的第一个屏幕截图中的 40,000)仍有可能出现并创建一些空间。我也希望我可以避免删除侧边距导致我的栏直接撞到它们的窗格顶部,但我可以忍受它(尽管能够设置上边距和下边距会很棒......)。不过我会继续使用 MinMaxValues,我敢打赌有办法解决剩下的问题......
    • @jmatula 您控制发送到图表控件的数据,对吗?如果您尝试在将图表绑定到数据之前获取该上边界值并将 SetMinMaxValues 设置为稍小的最大值以不显示上标签怎么办?抱歉,没有看到您的完整评论。是的,使用最小/最大轴标签值。如果答案在某种程度上有所帮助,将不胜感激。谢谢。
    • @jmatula 我检查了一些图表,发现除了 PaneDistance=0 之外,它们还设置了 LabelsResolveOverlappingMinIndex 属性,例如:<cc1:XYDiagram PaneDistance="0" LabelsResolveOverlappingMinIndent="-2">。所以,也许你也可以尝试设置/更改那个。
    • 不幸的是,该属性(C# 中的diagram.Label.ResolveOverlappingOptions.MinIndent)在这种情况下似乎没有帮助。在我看来,它处理的是同一轴上的重叠标签,而不是不同轴上的重叠标签。好建议!