Silverlight列系列图表宽度问题

时间:2010-12-06 16:15:33

标签: silverlight silverlight-4.0 charts silverlight-toolkit

我使用Silverlight Toolkit中的标准Silverlight图表在图表上显示了一些数据,但是所有数据都不会显示在一个图表上,并且每组列之间似乎存在大量间距在右侧的数据列被“切断”。

有没有人知道如何减少这个间距和/或告诉图表有一个固定的宽度,以便它适合所有列。

下面是一个可视化演示问题的图像。 alt text

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"/>

但它只是获得图表宽度和系列的#的相对宽度。

1 个答案:

答案 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执行所有繁重操作,然后调整数据点的宽度和左侧位置。