создание диаграмм Silverlight без начальной анимации для печати (печать в серии данных) - PullRequest
1 голос
/ 24 августа 2010

Я немного рассол. Мне нужно сгенерировать графики (за пределами экрана, чтобы пользователь их не видел) и сделать их сохраняемыми. это означает настройку основ и построение изображения из загруженного графика. Я говорю о графике колонок серии FYI:)

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

Я пробовал несколько вещей:

  • различные события, которые могут сработать в конце рендера
  • задержка построения изображения (но это не пуленепробиваемый)

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

любая помощь в этой области будет принята с благодарностью.

EDIT:

Я портировал на свое основное решение mvvm, что заставило меня поместить его в пользовательский элемент управления. после некоторого сотрудничества с коллегами мы решили, что элемент управления должен создавать серию изображений (в форме WriteableBitmaps) из серии данных (списки списков).

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

это подводит меня к следующей луже проблем. так как я не могу подписаться на событие LayoutUpdated (поскольку оно запускается практически ВСЕМ), я немного застрял. В элементе управления есть 1 график, который постоянно загружается новыми данными, что, в свою очередь, приводит к тому, что загруженное событие происходит только один раз. Мне нужно решение (своего рода событие), которое позволяет мне знать, что все данные отображаются, чтобы я мог сделать снимок экрана и вставить некоторые новые данные ...

помощь

Ответы [ 2 ]

0 голосов
/ 26 августа 2010

Что я сделал, так это добавил этот стиль:

<Style x:Key="customColumnDataPoint" TargetType="chartingToolkit:ColumnDataPoint">
    <Setter Property="Background" Value="DarkBlue"/>
    <Setter Property="BorderBrush" Value="Black"/>
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="IsTabStop" Value="False"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="chartingToolkit:ColumnDataPoint">
                <Border
                    BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}"
                    x:Name="Root">
                    <VisualStateManager.CustomVisualStateManager>
                        <ei:ExtendedVisualStateManager/>
                    </VisualStateManager.CustomVisualStateManager>
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                            <VisualStateGroup.Transitions>
                                <VisualTransition GeneratedDuration="0"/>
                            </VisualStateGroup.Transitions>
                            <VisualState x:Name="Normal"/>
                            <VisualState x:Name="MouseOver">
                            </VisualState>
                        </VisualStateGroup>
                        <VisualStateGroup x:Name="SelectionStates">
                            <VisualStateGroup.Transitions>
                                <VisualTransition GeneratedDuration="0"/>
                            </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>
                        <VisualStateGroup x:Name="RevealStates">
                            <VisualStateGroup.Transitions>
                                <VisualTransition GeneratedDuration="0"/>
                            </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="1"
                                        Duration="0"/>
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                    <Grid
                        Background="{TemplateBinding Background}">
                        <Rectangle>
                            <Rectangle.Fill>
                                <LinearGradientBrush>
                                    <GradientStop
                                        Color="#77ffffff"
                                        Offset="0"/>
                                    <GradientStop
                                        Color="#00ffffff"
                                        Offset="1"/>
                                </LinearGradientBrush>
                            </Rectangle.Fill>
                        </Rectangle>
                        <Border
                            BorderBrush="#ccffffff"
                            BorderThickness="1">
                            <Border
                                BorderBrush="#77ffffff"
                                BorderThickness="1"/>
                        </Border>
                        <Rectangle x:Name="SelectionHighlight" Fill="Red" Opacity="0"/>
                        <Rectangle x:Name="MouseOverHighlight" Fill="White" Opacity="0"/>
                    </Grid>
                    <ToolTipService.ToolTip>
                        <ContentControl Content="{TemplateBinding FormattedDependentValue}"/>
                    </ToolTipService.ToolTip>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

он сворачивает анимацию в ничто, но все еще не делает пуленепробиваемое решение ...

Мне все еще нужно событиена который подписаться.Я отредактировал свой оригинальный вопрос, чтобы добавить больше деталей ...

0 голосов
/ 24 августа 2010

Эта ссылка может представлять интерес, поскольку проблема, с которой вы сталкиваетесь, должна быть аналогична той, которая возникает при печати диаграммы: http://www.davidpoll.com/2010/04/16/making-printing-easier-in-silverlight-4/

В основном (при условии, что вы не можете повторно шаблонировать серию [намного проще с ExpressionСмешайте!]) Вы можете пройтись по визуальному дереву и «завершить» любую раскадровку, вызвав SkipToFill ().

Из вышеупомянутой ссылки:

 private static void DriveAnimationsToCompletion(FrameworkElement element)
    {
        if (element == null)
            return;
        var groups = VisualStateManager.GetVisualStateGroups(element);
        foreach (VisualStateGroup group in groups)
        {
            foreach (
                Storyboard board in group.Transitions.Cast<VisualTransition>().Select(trans => trans.Storyboard)
                    .Concat(group.States.Cast<VisualState>().Select(state => state.Storyboard))
                    .Where(board => board.GetCurrentState() != ClockState.Stopped))
            {
                board.SkipToFill();
            }
        }
        foreach (
            FrameworkElement child in
                Enumerable.Range(0, VisualTreeHelper.GetChildrenCount(element)).Select(
                    index => VisualTreeHelper.GetChild(element, index)).OfType<FrameworkElement>())
            DriveAnimationsToCompletion(child);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...