2013-01-23 25 views
0

我有一个非常简单的Visiblox表工作正常:渲染Visiblox图表上业务报告没有图形用户界面引发的NullReferenceException

<charts:Chart Grid.Row="1" Height="100" x:Name="VisiChart"> 
    <charts:Chart.Series> 
     <charts:LineSeries/> 
    </charts:Chart.Series> 
</charts:Chart> 

设置我DataSeries在后台代码:

VisiChart.Series[0].DataSeries = MyDataSeries; 

就那么简单。

我可以使用此方法视觉元素抢位图:

private static RenderTargetBitmap AsBmpToClipboard(FrameworkElement element) 
{ 
    var width = (int)Math.Round(element.ActualWidth); 
    var height = (int)Math.Round(element.ActualHeight); 
    var bmpCopied = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Default); 
    var dv = new DrawingVisual(); 
    using (var dc = dv.RenderOpen()) 
    { 
     var vb = new VisualBrush(element); 
     dc.DrawRectangle(vb, null, new Rect(new Point(), new Size(width, height))); 
    } 
    bmpCopied.Render(dv); 
    Clipboard.SetImage(bmpCopied); // clipboard it for testing reasons 
    return bmpCopied; 
} 

现在,我在报告中或任何使用此位图。这工作。

问题来了:如果我想用没有GUI的图表图像创建我的报表(在服务器应用程序中,例如Windows服务或IIS中),我从图表中获得NullReferenceException

我所做的是创建包含图表的控件。然后我在控件上调用Measure()以使其工作。这就是我得到:

NullReferenceException 
at Visiblox.Charts.Chart.OnApplyTemplateInternal() 
    at Visiblox.Charts.ChartBase.OnApplyTemplate() 
    at System.Windows.FrameworkElement.ApplyTemplate() 

我想我必须手动设置图表的模板,但我在哪里找到VisiBlox默认模板?我如何使用它们?还是有另一个问题?

非常感谢。

---编辑---

所以,我想,如果我叫一个控制台应用程序一个VisiBox图(或包含图表元素)的测量()我总是得到这个异常。所以,我也可以改变这个问题的标题如何在控制台应用程序

回答

0

确定使用VisiBlox图表,我想通了答案:

1)包裹visiblox东西在

InvalidationHandler.ForceImmediateInvalidate = true; 
// here comes the chart 
InvalidationHandler.ForceImmediateInvalidate = false; 

告诉它实际渲染。

2)手动设置数据,而不是通过DataContext。如果未显示组件,则可能未连线。

3)手动设置图表的样式。默认值在Visiblox Generic.xaml文件中。