如何使整个 StackedColumn 可点击,而不仅仅是其中的 DataPoints
How to make an entire StackedColumn clickable, not just the DataPoints in it
当数据点值相对于图表中的最大值较小时,点击图表列并不容易,因为可点击区域太小了。所以,我想找到一种方法让整个列都可以点击,包括显示数据点上方和下方的空白区域。
自从 HitTest 检测到带状线以来,我一直在研究与列对齐的带状线,但我很难理解 if/how 可以进行对齐。
这是一个可行的想法还是有其他方法可以满足我的 objective?
屏幕截图显示了问题。 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
的想法很有趣,顺便说一句,但我想不出找到正确宽度和位置的方法。
另一种选择是扫描所有系列中的所有点以找到我们最接近的点,然后使用它们的值,但这听起来更昂贵..
当数据点值相对于图表中的最大值较小时,点击图表列并不容易,因为可点击区域太小了。所以,我想找到一种方法让整个列都可以点击,包括显示数据点上方和下方的空白区域。
自从 HitTest 检测到带状线以来,我一直在研究与列对齐的带状线,但我很难理解 if/how 可以进行对齐。
这是一个可行的想法还是有其他方法可以满足我的 objective?
屏幕截图显示了问题。 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
的想法很有趣,顺便说一句,但我想不出找到正确宽度和位置的方法。
另一种选择是扫描所有系列中的所有点以找到我们最接近的点,然后使用它们的值,但这听起来更昂贵..