【发布时间】:2014-01-27 18:44:18
【问题描述】:
在下面示例的蓝色曲线上,第一个数据点 (74.2%) 显示在曲线下方,而其他 3 个数据点显示在曲线上方(85.9%、94.6%、104.7%)。
我最初认为当该点距离图表区域顶部太近时,标签会显示在该点下方。实际上,标签是否打印在某个点的上方或下方似乎是相当随意的(您会注意到第一个点也是 Y 轴上的“最低点”......)。
有没有办法强制标签总是在它们各自的点上方打印?
【问题讨论】:
在下面示例的蓝色曲线上,第一个数据点 (74.2%) 显示在曲线下方,而其他 3 个数据点显示在曲线上方(85.9%、94.6%、104.7%)。
我最初认为当该点距离图表区域顶部太近时,标签会显示在该点下方。实际上,标签是否打印在某个点的上方或下方似乎是相当随意的(您会注意到第一个点也是 Y 轴上的“最低点”......)。
有没有办法强制标签总是在它们各自的点上方打印?
【问题讨论】:
您没有发布任何重现代码,很难从屏幕截图中对代码进行逆向工程。当您遇到此类非常具体的问题时,切勿跳过此内容。
猜猜看,您正在与“智能标签”功能作斗争。这在某种程度上不可避免地意味着它会有自己的想法,迟早不会做你希望它做的事情。您可以通过Series.SmartLabelStyle 属性一些 控制它的使用方式。首先肯定要尝试的是将其Enabled property 设置为false,这样它就不再聪明了。下一个你可以修改的是它的AllowOutsidePlotArea property。
如果这些都不能让您有所收获,那么请考虑利用 Chart.PostPaint 事件并自己绘制这些标签。当然,您可以完全控制它们的放置位置。
【讨论】:
我不会禁用 SmartLabelStyle,而是调整它的参数。你应该看看MovingDirection Property。这可以控制允许标签移动的方向。 因此,您可能希望将其值设置为“Top”,以使其看起来更多,即使您应该将 Min 和 Max 移动距离指定为相同的数量。
【讨论】: