我正在使用Silverlight WriteableBitmap命令使用以下代码呈现"饼图".
Chart GetChart()
{
Chart newChart = new Chart() { Width = 100.0,
Height = 100.0 };
PieSeries pieSeries = new PieSeries();
pieSeries.SetBinding(PieSeries.ItemsSourceProperty, new Binding());
pieSeries.DependentValueBinding = new Binding("Value");
pieSeries.IndependentValueBinding = new Binding("Key");
pieSeries.AnimationSequence = AnimationSequence.FirstToLast;
pieSeries.IsSelectionEnabled = true;
newChart.Series.Add(pieSeries);
newChart.SetValue(Chart.DataContextProperty, new KeyValuePair<string, int>[]
{
new KeyValuePair<string, int>("Work", 9),
new KeyValuePair<string, int>("Driving", 2),
new KeyValuePair<string, int>("Family", 4),
new KeyValuePair<string, int>("Sleep", 8),
new KeyValuePair<string, int>("Friends", 1)
});
return newChart;
}
WriteableBitmap bmapPreviewCanvas = new WriteableBitmap(GetChart, null);
Run Code Online (Sandbox Code Playgroud)
我期待的结果是带有PieChart的Bitmap.我得到的是一个没有任何PieChart背景的Bitmap.
问题是:我应该怎么做才能在变量'bmapPreviewCanvas'中呈现饼图?
编辑:这是否与ANIMATIONSEQUENCE有关?
我相信您的问题是您尝试创建位图的Chart控件的实例不在可视树上.
我自己并没有真正尝试过,但我相信如果UIElement不是可视树的一部分,你必须显式使用WritableBitmap类的Render()方法.在调用Render()之前,您还必须在元素上调用InvalidateMeasure(),然后在WritableBitmap上调用Invalidate()以实际渲染位图.
从MSDN文档:
调用此方法后,必须调用Invalidate才能呈现位图.
此方法支持不属于可视树的UIElement对象.在调用Render之前,您需要为不在可视树中的UIElement对象调用Measure和Arrange.
我会尝试以下代码:
var chart = GetChart();
chart.InvalidateMeasure();
WriteableBitmap bmapPreviewCanvas = new WriteableBitmap(chart.Width, chart.Height);
bmpaPreviewCanvas.Render(chart, null);
bmapPreviewCanvas.Invalidate();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2627 次 |
| 最近记录: |