gpt4 book ai didi

c# - 如何在 OnRender 中重绘或刷新?

转载 作者:太空狗 更新时间:2023-10-29 22:09:35 31 4
gpt4 key购买 nike

我想动态地绘制一些东西。以下代码显示了我的 OnRender。我在程序中需要它的地方设置 DrawItem。但是,当我调用 DrawItem =5; 时,我必须调用什么,以便调用 OnRender?

protected override void OnRender(DrawingContext drawingContext)
{
switch (DrawItem)
{
case 1:
//Draw Item
break;
case 2:
//Draw Item
break;
case 3:
//Draw Item
break;
case 4:
//Draw Item
break;
case 5:
//Draw Item
break;
}
base.OnRender(drawingContext)
}

public int DrawItem { get; set; }

最佳答案

如果控件的大小发生变化,您可以使用 InvalidateVisual(),但是请记住,这会导致相当昂贵的 UI 重新布局。如果控件的大小保持不变,则不应调用 InvalidateVisual()

更新 UI 的更有效方法是创建 DrawingGroup“后备存储”,并在 OnRender() 期间将其添加到 DrawingContext >。然后,您可以随时使用 DrawingGroup.Open() 更新它,WPF 将更新您的 UI。

如果这听起来令人困惑,请记住 WPF 是一个保留绘图系统。这意味着 OnRender() 最好称为 AccumulateDrawingObjects()。它实际上是在累积一棵实时绘图对象树,其中一些对象(如 DrawingGroup、RenderTargetBitmap 和 WriteableBitmap)可以稍后更新。

这是它的样子:

DrawingGroup backingStore = new DrawingGroup();

protected override void OnRender(DrawingContext drawingContext) {
base.OnRender(drawingContext);

Render(); // put content into our backingStore
drawingContext.DrawDrawing(backingStore);
}

// I can call this anytime, and it'll update my visual drawing
// without ever triggering layout or OnRender()
private void Render() {
var drawingContext = backingStore.Open();
Render(drawingContext);
drawingContext.Close();
}

关于c# - 如何在 OnRender 中重绘或刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10585069/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com