c# – wpf中的等效CreateGraphics

所以,我使用了winForms .CreateGraphics来绘制各种不同的东西,从线条到盒子再到图像.它非常活泼,反应灵敏.

我想在C#中学习WPF

我发现WPF允许我将“矩形”对象“添加”到画布上,以便正确显示它们.但是,我有时会画出数十万个矩形,并且绘制速度会变得非常慢,当我移动一个矩形时,UI变得不那么活泼.

在winForms中直接绘制到元素上并不是很快,但无论我绘制多少,它都是一致的.

在WPF中有这样的解决方案吗?

我尝试将一个linq添加到System.Drawing,它给了我一个Graphics对象,但我试过的wpf元素都没有.CreateGraphics()方法.

解决方法

您需要创建一个覆盖 OnRender的控件并在那里进行绘制.没有办法让你绘制另一个控件,但控件可以绘制自己.

此外,请记住,WPF使用retained graphics,因此如果您更改了某些内容,则需要根据需要使视觉无效.

编辑:

就像是:

public class MyControl : Control {

    public MyControl() {
       this.Rects = new ObservableCollection<Rect>();
       // Todo: attach to CollectionChanged to kNow when to invalidate visual
    }

    public ObservableCollection<Rect> Rects { get; private set; }

    protected override void OnRender(DrawingContext dc) {
        SolidColorBrush mySolidColorBrush  = new SolidColorBrush();
        mySolidColorBrush.Color = Colors.LimeGreen;
        Pen myPen = new Pen(Brushes.Blue,10);

        foreach (Rect rect in this.Rects)
            dc.DrawRectangle(mySolidColorBrush,myPen,rect);
    }
}

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...