Набор инструментов Silverlight. StackedColumnSeries добавить метку над столбцом - PullRequest
0 голосов
/ 08 декабря 2010

Как добавить метки с суммой для столбца.Мне нужно сделать это с помощью набора диаграмм из набора инструментов Silverlight

alt text

1 Ответ

0 голосов
/ 20 ноября 2013
  1. Был создан пользовательский StackedColumnSeriesEx! Здесь вы должны найти определение, что мы используем новый тип пользовательских точек данных, и мы можем найти сумму значений точек данных. Также мы должны определить, какая точка данных находится ТОП больше всего в StackedColumnSeries:

      public class StackedColumnSeriesEx : StackedColumnSeries
    {
        protected override DataPoint CreateDataPoint()
        {
        // Custom data point with new fields.
            return new CustomDataPoint();
        }
    
        protected override void UpdateDataItemPlacement(IEnumerable<DataItem> dataItems)
            {
            // Calculate sum here.
                foreach (var group in this.IndependentValueGroups)
                {
    
                    decimal sum = 0;
    
    
    
               foreach (var dataItem in group.DataItems)
                        {
                            double currentValue = 0;
                            if (ValueHelper.TryConvert(dataItem.ActualDependentValue, out currentValue))
                            {
                                sum += Convert.ToDecimal(currentValue);
                            }
                        }
    
                        // Set sum and find most top point
                        foreach (DataItem dataItem in group.DataItems)
                        {
                            int index = group.DataItems.IndexOf(dataItem);
    
                            var convertedDataItem = dataItem.DataPoint as CustomDataPoint;
                            if (convertedDataItem == null)
                            {
                                continue;
                            }
    
                            convertedDataItem.SeriesDefinition = dataItem.SeriesDefinition;
                            convertedDataItem.IsTopPoint = index + 1 == group.DataItems.Count();
                            convertedDataItem.DependentValueSum = sum;
                        }
                    }
    
    
    
                        base.UpdateDataItemPlacement(dataItems);
                    }
                }
    
  2. Новый CustomDataPoint с несколькими новыми свойствами зависимостей

    IsTopPoint - значение bool, указывающее, является ли текущая точка самой верхней точкой!

    DependentValueSum - двойное значение для отображения. Свойство зависимости

  3. Новый стиль CustomDataPoint для рисования текста DependentValueSum в случае, если его самое верхнее значение:

`

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:CustomDataPoint">
                    <Grid x:Name="Root"
                          Opacity="0">
                        <ToolTipService.ToolTip>
                            <ToolTip BorderThickness="0"
                                     DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}"
                                     Background="Transparent"
                                     BorderBrush="Transparent">
                                <ToolTip.Template>
                                    <ControlTemplate TargetType="ToolTip">
                                        <Charts:ExpensesToolTip HorizontalAlignment="Stretch"
                                                                VerticalAlignment="Stretch" />
                                    </ControlTemplate>
                                </ToolTip.Template>
                            </ToolTip>
                        </ToolTipService.ToolTip>
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="CommonStates">
                                <VisualStateGroup.Transitions>
                                    <VisualTransition GeneratedDuration="0:0:0.1" />
                                </VisualStateGroup.Transitions>
                                <VisualState x:Name="Normal" />
                                <VisualState x:Name="MouseOver" />
                            </VisualStateGroup>
                            <VisualStateGroup x:Name="SelectionStates">
                                <VisualStateGroup.Transitions>
                                    <VisualTransition GeneratedDuration="0:0:0.1" />
                                </VisualStateGroup.Transitions>
                                <VisualState x:Name="Unselected" />
                                <VisualState x:Name="Selected" />
                            </VisualStateGroup>
                            <VisualStateGroup x:Name="RevealStates">
                                <VisualStateGroup.Transitions>
                                    <VisualTransition GeneratedDuration="0:0:0.5" />
                                </VisualStateGroup.Transitions>
                                <VisualState x:Name="Shown">
                                    <Storyboard>
                                        <DoubleAnimation Duration="0"
                                                         To="1"
                                                         Storyboard.TargetProperty="Opacity"
                                                         Storyboard.TargetName="Root" />
                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="Hidden">
                                    <Storyboard>
                                        <DoubleAnimation Duration="0"
                                                         To="0"
                                                         Storyboard.TargetProperty="Opacity"
                                                         Storyboard.TargetName="Root" />
                                    </Storyboard>
                                </VisualState>
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups><TextBlock Text="{TemplateBinding DependentValuesSum}"
                                   VerticalAlignment="Top" Margin="-2,-21,0,0" TextAlignment="Center"
                               Visibility="{Binding IsTopPoint, Converter={StaticResource VisibilityConverter}, RelativeSource={RelativeSource TemplatedParent}}"
                               HorizontalAlignment="Center" />
                    <Grid x:Name="grid"
                          Background="{TemplateBinding Background}">
                        <Grid.OpacityMask>
                            <LinearGradientBrush EndPoint="0.5,1"
                                                 StartPoint="0.5,0">
                                <GradientStop Color="#87FFFFFF" />
                                <GradientStop Color="#D6FFFFFF"
                                              Offset="1" />
                            </LinearGradientBrush>
                        </Grid.OpacityMask>
                    </Grid>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>`
...