Вопрос о ширине столбцов серии Silverlight - PullRequest
2 голосов
/ 06 декабря 2010

У меня есть некоторые данные, отображаемые на диаграммах с использованием стандартных диаграмм Silverlight из набора инструментов Silverlight, однако все данные не будут отображаться на одном графике, и, по-видимому, между каждым набором столбцов происходит большое расстояние, что приводит в правой части столбцы данных «отрубаются».

Кто-нибудь знает, как я могу уменьшить это расстояние и / или указать графику фиксированную ширину, чтобы он помещался во всех столбцах.

Ниже приведено изображение, наглядно демонстрирующее проблему. alt text

LordCover Edit: Я добавляю к исходному вопросу, что я хочу прямой способ установить фиксированную ширину для каждого 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 Ответ

4 голосов
/ 09 февраля 2011

Для Кевина

Поскольку Кевин первоначально задал вопрос, позвольте мне сначала заявить: это странно.Представление набора рядов столбцов смещено от левого начала, которое должно быть.Как отмечалось в моем комментарии много месяцев назад, мне нужно больше подробностей, чтобы попытаться понять, почему происходит эта странность.

Для 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 выполнять всю тяжелую работу, а затем настраивать ширину и левое положение точки данных после этого.

...