我有点腌渍。 我需要生成图表(关闭屏幕以便用户看不到它们)并使这些图表可以保存。这意味着设置基础知识并从加载的图表构建图像。 我在谈论一个列系列图表fyi:)
问题是内置的轻松动画。当图表触发“已加载”事件时,我生成一个要保存的图像,因此图表上没有任何内容。
我尝试了几件事:
到目前为止,我所有的谷歌搜索都是在没有动画的情况下重新设计数据点(为此我找不到任何一个主要问题的参考,我唯一能找到的是关于StylePalette的东西,什么都无处可寻在集会中)
非常感谢这方面的任何帮助。
编辑:
我移植到我的主要mvvm解决方案,这使我把它放入自定义控件。 在与同事合作之后,我们决定控件应该从一系列数据(列表列表)中生成一系列图像(以WriteableBitmaps的形式)。
这可以通过运行列表并渲染我需要的东西来完成。当然,在可见的visualtree之外,因为必须将图像添加到客户端生成的文档中。
这让我想到了下一个问题。因为我无法订阅LayoutUpdated事件(因为它几乎被一切所触发)我有点卡住了。 控件上有1个图表,它不断加载新数据,这反过来导致加载的事件只发生一次。我需要一个解决方案(各种事件),让我知道所有数据都已呈现,所以我可以拉动屏幕截图并输入一些新数据......
帮助?
答案 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>
它将动画折叠为空,但仍然没有制作防弹解决方案......
我仍然需要订阅的活动。我编辑了我的原始问题以添加更多细节...