使用 DrawingGroup 高效绘图
Efficient drawing with DrawingGroup
如何使用DrawingGroup局部绘制?
这是我想做的。我想先画一些初始元素
private readonly DrawingGroup _backingStore = new DrawingGroup();
protected override void OnRender(DrawingContext dc)
{
base.OnRender(dc);
InitialRender();
dc.DrawDrawing(_backingStore);
}
private void InitialRender()
{
var dc = _backingStore.Open();
// draw with draw context.
_backingStore.Close();
}
初始渲染工作正常。现在,当集合来源发生变化时,我想在现有图纸上绘制更多元素。
问题是当我打开绘图组获取绘图上下文时,所有内容都被清除(只剩下新绘图)。
private void ValueOnCollectionChanged(object sender, NotifyCollectionChangedEventArgs args)
{
Render(args.NewItems);
}
private void Render(IList newItems)
{
var dc = _backingStore.Open(); // how to avoid clearing previous items?
// draw more stuff
dc.Close();
}
感谢@Clemens 的评论,为了保留以前的图纸,我不得不使用 _backingStore.Append();
。
如何使用DrawingGroup局部绘制?
这是我想做的。我想先画一些初始元素
private readonly DrawingGroup _backingStore = new DrawingGroup();
protected override void OnRender(DrawingContext dc)
{
base.OnRender(dc);
InitialRender();
dc.DrawDrawing(_backingStore);
}
private void InitialRender()
{
var dc = _backingStore.Open();
// draw with draw context.
_backingStore.Close();
}
初始渲染工作正常。现在,当集合来源发生变化时,我想在现有图纸上绘制更多元素。
问题是当我打开绘图组获取绘图上下文时,所有内容都被清除(只剩下新绘图)。
private void ValueOnCollectionChanged(object sender, NotifyCollectionChangedEventArgs args)
{
Render(args.NewItems);
}
private void Render(IList newItems)
{
var dc = _backingStore.Open(); // how to avoid clearing previous items?
// draw more stuff
dc.Close();
}
感谢@Clemens 的评论,为了保留以前的图纸,我不得不使用 _backingStore.Append();
。