WPF Toolkit - Отключить анимацию диаграммы - PullRequest
5 голосов
/ 08 сентября 2010

Когда создается новая диаграмма и добавляется серия (например, ColumnSeries) вместе с данными, столбцы отображаются как тип анимации FadeIn и появляются через доли секунды после прорисовки диаграммы на экране.

Есть ли способ остановить эту анимацию?В качестве альтернативы, есть ли способ заставить график завершить анимацию перед рендерингом?

Пол

1 Ответ

1 голос
/ 26 ноября 2011

я скачал последний исходный код на http://wpf.codeplex.com/SourceControl/list/changesets

Моя идея состоит в том, чтобы удалить анимацию, изменив стиль для различных серий диаграмм (точки диаграммы, DataPointStyle)

примердля charting:PieDataPoint

попробуйте удалить анимацию для отображаемых данных и выбрать собственный стиль с заданным ключом (x: key = "myStyle" -> DataPointStyle="{StaticResource myStyle}")

и удалитьOpacity="0" at <Grid x:Name="Root" Opacity="0">

удалить эту визуальную группу состояний из вашего стиля

<VisualStateGroup x:Name="RevealStates">
    <VisualStateGroup.Transitions>
        <VisualTransition GeneratedDuration="0:0:0.5" />
    </VisualStateGroup.Transitions>
    <VisualState x:Name="Shown">
        <Storyboard>
            <DoubleAnimation Storyboard.TargetName="Root" Storyboard.TargetProperty="Opacity" To="1" Duration="0" />
        </Storyboard>
    </VisualState>
    <VisualState x:Name="Hidden">
        <Storyboard>
            <DoubleAnimation Storyboard.TargetName="Root" Storyboard.TargetProperty="Opacity" To="0" Duration="0" />
        </Storyboard>
    </VisualState>
</VisualStateGroup>

РЕДАКТИРОВАТЬ

Это измененный стиль.

<!--  charting:PieDataPoint  -->
<Style TargetType="charting:PieDataPoint">
    <Setter Property="Background" Value="Orange" />
    <Setter Property="BorderBrush" Value="White" />
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="IsTabStop" Value="False" />
    <Setter Property="RatioStringFormat" Value="{}{0:p2}" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="charting:PieDataPoint">
                <Grid x:Name="Root" Opacity="0">
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                            <VisualStateGroup.Transitions>
                                <VisualTransition GeneratedDuration="0:0:0.1" />
                            </VisualStateGroup.Transitions>
                            <VisualState x:Name="Normal" />
                            <VisualState x:Name="MouseOver">
                                <Storyboard>
                                    <DoubleAnimation Storyboard.TargetName="MouseOverHighlight" Storyboard.TargetProperty="Opacity" To="0.6" Duration="0" />
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                        <VisualStateGroup x:Name="SelectionStates">
                            <VisualStateGroup.Transitions>
                                <VisualTransition GeneratedDuration="0:0:0.1" />
                            </VisualStateGroup.Transitions>
                            <VisualState x:Name="Unselected" />
                            <VisualState x:Name="Selected">
                                <Storyboard>
                                    <DoubleAnimation Storyboard.TargetName="SelectionHighlight" Storyboard.TargetProperty="Opacity" To="0.6" Duration="0" />
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                    <Path x:Name="Slice" Data="{TemplateBinding Geometry}" Fill="{TemplateBinding Background}" Stroke="{TemplateBinding BorderBrush}" StrokeMiterLimit="1">
                        <ToolTipService.ToolTip>
                            <StackPanel>
                                <ContentControl Content="{TemplateBinding FormattedDependentValue}" />
                                <ContentControl Content="{TemplateBinding FormattedRatio}" />
                            </StackPanel>
                        </ToolTipService.ToolTip>
                    </Path>
                    <Path x:Name="SelectionHighlight" Data="{TemplateBinding GeometrySelection}" Fill="Red" StrokeMiterLimit="1" IsHitTestVisible="False" Opacity="0" />
                    <Path x:Name="MouseOverHighlight" Data="{TemplateBinding GeometryHighlight}" Fill="White" StrokeMiterLimit="1" IsHitTestVisible="False" Opacity="0" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

После моей первой попытки удалить анимацию я хотел сдаться, потому что она не сработала.

Но потом я посмотрел на меня с отражателем на исходный код и получилнашел способ, которым он все еще работает.

Установка DataPointStyle, к сожалению, недостаточно, я думаю, что это ошибка.

<chartingToolkit:Chart Margin="8">

  <chartingToolkit:Chart.Series>
    <chartingToolkit:BarSeries x:Name="barSeries"
                                Title="Experience"
                                DataPointStyle="{StaticResource myBarStyle}">
    </chartingToolkit:BarSeries>
  </chartingToolkit:Chart.Series>

</chartingToolkit:Chart>

В конструкторе элемента управления, в который включена диаграмма, просто выполните команду

this.barSeries.RefreshStyles();

надеюсь, это поможет

...