当数据点值相对于图表中的最大值较小时,点击图表列并不容易,因为可点击区域非常小。所以,我想找到一种方法让整列可点击,包括显示数据点上方和下方的空白区域。如何使整个StackedColumn可点击,而不仅仅是数据点
我一直在寻找这样做,带状线与列对齐,因为带状线被HitTest检测到,但我很难理解是否/如何进行对齐。
这是一个可行的想法还是有一些其他方式来实现我的目标?
屏幕截图显示了问题。 2025年的数据用BackHatching高亮显示。
当数据点值相对于图表中的最大值较小时,点击图表列并不容易,因为可点击区域非常小。所以,我想找到一种方法让整列可点击,包括显示数据点上方和下方的空白区域。如何使整个StackedColumn可点击,而不仅仅是数据点
我一直在寻找这样做,带状线与列对齐,因为带状线被HitTest检测到,但我很难理解是否/如何进行对齐。
这是一个可行的想法还是有一些其他方式来实现我的目标?
屏幕截图显示了问题。 2025年的数据用BackHatching高亮显示。
这应有助于:
private void chart1_MouseClick(object sender, MouseEventArgs e)
{
Axis ay = chart1.ChartAreas[0].AxisY;
int zeroPix = (int)ay.ValueToPixelPosition(0);
HitTestResult hittr = chart1.HitTest(e.X, zeroPix);
// now you can do your stuff..
Text = hittr.ChartElementType.ToString();
}
诀窍是测试不实际的垂直鼠标的位置,但其中zero
数据值位于像素。由于(正确填充)StackedColumn
图表在这个位置应该有一个DataPoint
所有列,我们可以在那里做HitTest
。
相同的技巧也应该柱形图工作:这里太每列将上升或下降到它的y值,但始终为0
的想法开始使用StripLines
是耐人寻味的,顺便说一句,但我想不出找到合适的宽度和位置的方法。
另一种方法是扫描的全部点中的所有系列,以找到那些我们最接近,然后用他们的价值观,但是这听起来甚至更贵的..
辉煌。谢谢。对于其他读者来说,你可以通过舍入hittr.Axis.PixelPositionToValue(e.X)得到被单击的X轴值(在我的情况下为Year)。请注意,您可能需要测试自第1列前面的单击之后或之后最后一个X轴值超出绘制范围的X轴值,它们将返回未绘制的X轴值。 –
我刚刚发现,由于某种原因,因为hittr.Axis值为空,所以当出现负值时,我的建议是不能获取X轴值。所以,请用上面四舍五入的chart1.ChartAreas [0] .AxisX.PixelPositionToValue(e.X)代替我上面的语句。 –
你能与你的技术,这个标签使用 – FloatingKiwi
是的。我应该做到这一点。它是在Win 8.1笔记本电脑上用Visual Studio Community 2015开发的C#WinForms应用程序。 –