当由于滚动而出现长标签时,图表正在重新缩放轴标签的区域
Chart is rescaling area for axis labels when long labels appear due to scrolling
我有一些字符串标签,每个标签都与一个数字相关联。
我创建了一个 Chart
元素,其中一个 ChartArea
和一个 Series
使用 SeriesChartType.Bar
类型在 x 轴上显示我的标签(令人困惑的是使用 Bar
类型时的垂直轴,但无论如何......)并将数字显示为旁边的条形。
因为我有很多标签不能同时显示在屏幕上,所以我 "enabled" 滚动条在我的 Paint
事件处理程序中使用 Zoom
方法,如下所示:
private void chart1_Paint(object sender, PaintEventArgs e)
{
var scaleView = chart1.ChartAreas.First().AxisX.ScaleView;
var pos = double.IsNaN(scaleView.Position) ? 0.0 : scaleView.Position;
scaleView.Zoom(pos, pos + chart1.Height / 22.0);
}
我不知道这样做是否正确,但它(几乎)满足了我的要求:
- 如果数据点(标签)太多无法显示在屏幕上,则显示滚动条
- 调整 window 大小时正确更新可见区域
只有一件烦人的事情:如果由于滚动,一个长标签出现在可见区域或消失,标签占用的区域被调整为最长的可见标签。我希望这些截图能解释我的意思:
这里可以看到一个长标签(在底部):
这里我向上滚动了一个单位,这样长标签就不再可见了:
这在滚动过程中非常烦人,因为只要长标签出现或消失,所有内容都会重新缩放。
如何修复标签占用的区域以始终适合系列中最长的标签,无论它当前是否可见?我在 x 轴和 y 轴上都尝试了 IsLabelAutoFit = false
,但这没有用。
好的,我知道了。我用了
chartArea.InnerPlotPosition.Auto = false;
InnerPlotPosition.X = 33.333;
将三分之一的图表区域分配给标签,将另外三分之二分配给条形图。
InnerPlotPosition.Auto = false
修复此问题,滚动时不会更新。
我有一些字符串标签,每个标签都与一个数字相关联。
我创建了一个 Chart
元素,其中一个 ChartArea
和一个 Series
使用 SeriesChartType.Bar
类型在 x 轴上显示我的标签(令人困惑的是使用 Bar
类型时的垂直轴,但无论如何......)并将数字显示为旁边的条形。
因为我有很多标签不能同时显示在屏幕上,所以我 "enabled" 滚动条在我的 Paint
事件处理程序中使用 Zoom
方法,如下所示:
private void chart1_Paint(object sender, PaintEventArgs e)
{
var scaleView = chart1.ChartAreas.First().AxisX.ScaleView;
var pos = double.IsNaN(scaleView.Position) ? 0.0 : scaleView.Position;
scaleView.Zoom(pos, pos + chart1.Height / 22.0);
}
我不知道这样做是否正确,但它(几乎)满足了我的要求:
- 如果数据点(标签)太多无法显示在屏幕上,则显示滚动条
- 调整 window 大小时正确更新可见区域
只有一件烦人的事情:如果由于滚动,一个长标签出现在可见区域或消失,标签占用的区域被调整为最长的可见标签。我希望这些截图能解释我的意思:
这里可以看到一个长标签(在底部):
这里我向上滚动了一个单位,这样长标签就不再可见了:
这在滚动过程中非常烦人,因为只要长标签出现或消失,所有内容都会重新缩放。
如何修复标签占用的区域以始终适合系列中最长的标签,无论它当前是否可见?我在 x 轴和 y 轴上都尝试了 IsLabelAutoFit = false
,但这没有用。
好的,我知道了。我用了
chartArea.InnerPlotPosition.Auto = false;
InnerPlotPosition.X = 33.333;
将三分之一的图表区域分配给标签,将另外三分之二分配给条形图。
InnerPlotPosition.Auto = false
修复此问题,滚动时不会更新。