0

我想知道是否有办法在 visifire 图表完成渲染时获得回调。我一直在尝试创建一个图表并将其保存为图像。这适用于按下按钮,但如果我没有按钮则不起作用。我的猜测是因为图表没有完成加载,但我不太确定。当页面被加载时,我设置了在我的 XAML 中使用的 ObservableCollection 值。

我基本上有一些看起来像这样的数据系列:

<vc:Chart.Series>
            <vc:DataSeries RenderAs="StackedColumn" LegendText="Portion sequenced" LightingEnabled="False" AxisYType="Primary" Color="#4198AF" DataSource="{Binding SequencedValues}">
                <vc:DataSeries.DataMappings>
                    <vc:DataMapping  MemberName="AxisXLabel" Path="Key"></vc:DataMapping>
                    <vc:DataMapping MemberName="YValue" Path="Value"></vc:DataMapping>
                </vc:DataSeries.DataMappings>

这些由 ObservableCollection 填充。所以我首先调用我的方法 DrawImage() 来设置 observablecollection 值,然后调用 Save()。就像我说的,Save() 方法可以通过按下按钮自行工作,但如果我在绘制图像后调用它,则不会。我认为它最初与尚未完成加载的页面有关。但是使用

<i:Interaction.Triggers>
    <i:EventTrigger EventName="Loaded">
        <i:InvokeCommandAction Command="{Binding PageLoadCommand}" />
    </i:EventTrigger>
</i:Interaction.Triggers>

我只在页面加载时调用 DrawImage() 和 Save()。我什至尝试在 DrawImage() 和 Save() 之间设置一个 5 秒的睡眠定时器,以查看是否存在计时问题,我仍然只能获得背景图像,但我的 DataSeries 没有。

所以我的问题是是否有办法在 Visifire 图表加载后被回调,或者我是否缺少另一个解决方案。谢谢。

4

1 回答 1

1

水晶,

如果您正在使用 Silveright,那么您只能通过按下按钮等用户操作来保存图像,但如果您正在使用 WPF,则可以在图表完全呈现后立即保存图表。但是,如果您想在填充集合后立即保存图表,那么您可以在延迟一段时间后执行 Save() 方法(使用计时器)。请检查下面的代码。

MyChart.Series[0].DataSource = collection; //Populate Data 
timer.Tick += new EventHandler(timer_Tick);
timer.Interval = new TimeSpan(0, 0, 0, 0, 3000);// give some delay
timer.Start();

void timer_Tick1(object sender, EventArgs e)
{
  ExportToImage(new Uri("d:/visifire1.png"), MyChart);
}
于 2013-01-16T09:49:00.373 回答