【问题标题】:Silverlight Column Series Chart Width QuestionSilverlight Column Series 图表宽度问题
【发布时间】:2010-12-06 16:15:33
【问题描述】:

我使用 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"/>

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

【问题讨论】:

  • 包括图表 xaml 和您正在应用的任何自定义样式。
  • 我不知道你是否仍然感兴趣,但也许我们现在得到了答案:)

标签: silverlight silverlight-4.0 charts silverlight-toolkit


【解决方案1】:

给凯文

既然凯文最初提出这个问题,让我先声明一下:这很奇怪。列系列集的呈现与其应具有的左侧原点偏移。正如我在很多个月前的评论中所暗示的那样,我需要更多的细节来试图找出为什么会发生这种奇怪的事情。

为了 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 完成所有繁重的工作,然后调整数据点的宽度和左侧位置。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-24
  • 2014-02-02
  • 2012-05-09
相关资源
最近更新 更多