我使用Silverlight Toolkit中的标准Silverlight图表在图表上显示了一些数据,但是所有数据都不会显示在一个图表上,并且每组列之间似乎存在大量间距在右侧的数据列被“切断”。
有没有人知道如何减少这个间距和/或告诉图表有一个固定的宽度,以便它适合所有列。
下面是一个可视化演示问题的图像。
LordCover编辑:我在原始问题上添加了一个问题,我想直接设置每个ColumnSeries的固定宽度。我尝试使用
<Style x:Key="DataPointStyle1" TargetType="charting:ColumnDataPoint">
<Setter Property="Width" Value="5px" />
</Style>
然后,在ColumnSeries标记中:
<charting:ColumnSeries
IndependentValueBinding="{Binding Path=Key}"
DependentValueBinding="{Binding Path=Value}"
DataPointStyle="{StaticResource DataPointStyle1}"
Title="Sales Amount"/>
但它只是获得图表宽度和系列的#的相对宽度。
答案 0 :(得分:4)
对于凯文
凯文最初提出这个问题,让我先说明一点:那太奇怪了。列系列集的显示偏离它应该具有的左手原点。正如我多年前在评论中所暗示的那样,我需要更多的细节来试图辨别为什么会出现这种奇怪的现象。
对于LordCover
回答LordCover的补充,我认为这不是真正相关的。
答案实际上取决于您设置宽度的目的。我会回答你只想要更薄的列(列之间更大的间隙)。我选择了这个基础,因为我无法想到这样做的任何其他原因。
ColumnSeries
中的代码专门指定每个数据点的Width
,从而胜过您在样式中设置的任何值。因此,仅以数据点样式设置宽度是行不通的。此外,如果你有多个系列,那么你将失去默认的调色板,你也必须自己完成所有这些工作。
您可以做的是创建一个衍生的ColumnSeries。类似的东西: -
public class FixedWidthColumnSeries : ColumnSeries
{
#region public double ColumnWidth
public double ColumnWidth
{
get { return (double)GetValue(ColumnWidthProperty); }
set { SetValue(ColumnWidthProperty, value); }
}
public static readonly DependencyProperty ColumnWidthProperty =
DependencyProperty.Register(
"ColumnWidth",
typeof(double),
typeof(FixedWidthColumnSeries),
new PropertyMetadata(5.0));
#endregion public double ColumnWidth
protected override void UpdateDataPoint(DataPoint dataPoint)
{
base.UpdateDataPoint(dataPoint);
double originalWidth = dataPoint.Width;
double newWidth = ColumnWidth;
dataPoint.Width = newWidth;
Canvas.SetLeft(dataPoint, Canvas.GetLeft(dataPoint) + (originalWidth - newWidth) / 2);
}
}
这个类允许原始ColumnSeries
执行所有繁重操作,然后调整数据点的宽度和左侧位置。