silverlight charting没有用于打印的初始动画(在一系列数据中打印)

时间:2010-08-24 08:51:41

标签: silverlight printing charts

我有点腌渍。 我需要生成图表(关闭屏幕以便用户看不到它们)并使这些图表可以保存。这意味着设置基础知识并从加载的图表构建图像。 我在谈论一个列系列图表fyi:)

问题是内置的轻松动画。当图表触发“已加载”事件时,我生成一个要保存的图像,因此图表上没有任何内容。

我尝试了几件事:

  • 可以在渲染结束时触发的不同事件
  • 延迟图像的构建(但这不是防弹的)

到目前为止,我所有的谷歌搜索都是在没有动画的情况下重新设计数据点(为此我找不到任何一个主要问题的参考,我唯一能找到的是关于StylePalette的东西,什么都无处可寻在集会中)

非常感谢这方面的任何帮助。

编辑:

我移植到我的主要mvvm解决方案,这使我把它放入自定义控件。 在与同事合作之后,我们决定控件应该从一系列数据(列表列表)中生成一系列图像(以WriteableBitmaps的形式)。

这可以通过运行列表并渲染我需要的东西来完成。当然,在可见的visualtree之外,因为必须将图像添加到客户端生成的文档中。

这让我想到了下一个问题。因为我无法订阅LayoutUpdated事件(因为它几乎被一切所触发)我有点卡住了。 控件上有1个图表,它不断加载新数据,这反过来导致加载的事件只发生一次。我需要一个解决方案(各种事件),让我知道所有数据都已呈现,所以我可以拉动屏幕截图并输入一些新数据......

帮助?

2 个答案:

答案 0 :(得分:0)

此链接可能会引起您的兴趣,因为您遇到的问题应与尝试打印图表时类似:http://www.davidpoll.com/2010/04/16/making-printing-easier-in-silverlight-4/

基本上(假设您不能重新模板化系列[使用Expression Blend更容易!])您可以遍历可视树并通过调用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);
    }

答案 1 :(得分:0)

我所做的就是添加这种风格:

<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>

它将动画折叠为空,但仍然没有制作防弹解决方案......

我仍然需要订阅的活动。我编辑了我的原始问题以添加更多细节...