强制轴在 Visiblox 图表中使用给定数量的主要刻度线

发布于 2024-11-25 12:05:50 字数 147 浏览 0 评论 0原文

当在 Visiblox 图表中使用 LinearAxis 作为 Y 轴时,我想强制轴使用给定数量的主要刻度线,同时仍然让工具包自动计算轴范围和刻度线位置。例如,我可能有一个主要 Y 轴和一个次要 Y 轴,并且我希望两个轴使用相同数量的主要刻度,以便它们的水平网格线重叠。这可能吗?

When using a LinearAxis for the Y axis in a Visiblox chart, I would like to force the axis to use a given number of major tick marks while still having the toolkit automatically calculate the axis range and tick mark locations. For instance, I may have a primary and secondary Y axis and I want both axes to use the same number of major ticks so that their horizontal gridlines overlap. Is this possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夜声 2024-12-02 12:05:50

有几个选择。首先,您可以设置 MajorTickInterval< /a> 强制分配主要刻度。根据您的用例,您可能需要查看轴的实际范围,然后除以您想要获得合理间隔的刻度数。

另一种替代方法是对轴进行子类化并重写 GetMajorTickValues 方法,该方法是轴用来确定刻度放置位置的方法。

There are a couple of options. Firstly you can set the MajorTickInterval to force the distribution of major ticks. Depending on your use-case you may need to look at the actual range of the axis, and divide by the number of ticks you want to get a sensible interval.

The other alternative is to subclass the axis and override the GetMajorTickValues method which is what the axis uses to determine where to place ticks.

红尘作伴 2024-12-02 12:05:50

如果您需要强制主轴和辅助轴上的值之间的关系,可以通过 ElementName 绑定来实现。例如,您可以将辅助轴 MajorTickInterval 绑定到主轴计算的刻度间隔 ActualMajorTickInterval,如下所示:

<Grid x:Name="LayoutRoot" Background="White">
  <vis:Chart x:Name="chart">
    <vis:Chart.YAxis>
      <vis:LinearAxis x:Name="primaryAxis"/>
    </vis:Chart.YAxis>
    <vis:Chart.SecondaryYAxis>
      <vis:LinearAxis MajorTickInterval="{Binding ElementName=primaryAxis, Path=ActualMajorTickInterval}"/>
    </vis:Chart.SecondaryYAxis>
  </vis:Chart>
</Grid>

但是,根据您的数据,具有相同的刻度间隔每个轴可能不会导致您的主要刻度网格线重合。在这种情况下,您可能还想绑定范围:

<Grid x:Name="LayoutRoot" Background="White">
  <vis:Chart x:Name="chart">
    <vis:Chart.YAxis>
      <vis:LinearAxis x:Name="primaryAxis"/>
    </vis:Chart.YAxis>
    <vis:Chart.SecondaryYAxis>
      <vis:LinearAxis Range="{Binding ElementName=primaryAxis, Path=ActualRange}"
                      MajorTickInterval="{Binding ElementName=primaryAxis, Path=ActualMajorTickInterval}"/>
    </vis:Chart.SecondaryYAxis>
  </vis:Chart>
</Grid>

如果您需要更复杂的逻辑,可以通过值转换器来完成此操作。

If you need to enforce a relationship between the values on your primary and secondary axis, this can be achieved via ElementName binding. For example, you can bind the secondary axis MajorTickInterval to the computed tick interval of the primary axis, ActualMajorTickInterval as follows:

<Grid x:Name="LayoutRoot" Background="White">
  <vis:Chart x:Name="chart">
    <vis:Chart.YAxis>
      <vis:LinearAxis x:Name="primaryAxis"/>
    </vis:Chart.YAxis>
    <vis:Chart.SecondaryYAxis>
      <vis:LinearAxis MajorTickInterval="{Binding ElementName=primaryAxis, Path=ActualMajorTickInterval}"/>
    </vis:Chart.SecondaryYAxis>
  </vis:Chart>
</Grid>

However, depending ion your data, having the same tick interval for each axis may not cause your major tick gridlines to coincide. In this case, you might want to bind the range alse:

<Grid x:Name="LayoutRoot" Background="White">
  <vis:Chart x:Name="chart">
    <vis:Chart.YAxis>
      <vis:LinearAxis x:Name="primaryAxis"/>
    </vis:Chart.YAxis>
    <vis:Chart.SecondaryYAxis>
      <vis:LinearAxis Range="{Binding ElementName=primaryAxis, Path=ActualRange}"
                      MajorTickInterval="{Binding ElementName=primaryAxis, Path=ActualMajorTickInterval}"/>
    </vis:Chart.SecondaryYAxis>
  </vis:Chart>
</Grid>

If you need more complex logic, it might be possible to do this via value converters.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文