UIElement和Windows窗体控件之间有什么区别?

时间:2014-05-31 20:37:38

标签: c# wpf forms canvas

如果我想在传统的Windows窗体中创建一个带有绘图区域的表单,我会扩展面板类,然后覆盖onPaint方法来执行我的自定义绘图,如下所示:

public class SpecialPanel : System.Windows.Forms.Panel
{
    protected override void OnPaint(PaintEventArgs e)
    {
        Graphics G = e.Graphics;
        G.DrawEllipse(new Pen(Color.Red), 50, 80, 50, 10);

    }
}

但是在WPF中,如果我尝试扩展canvas类,则没有onPaint方法来覆盖

public class SpecialCanvas : Canvas //Error no OnPaint method
{
    public override OnPaint(PaintEventArgs e)
    {

    }
}

如果我想绘制画布,我会以类似的方式进行绘制:

        Canvas.SetLeft(shape.shape, r.Next(1, 1150));
        Canvas.SetTop(shape.shape, r.Next(1, 500));
        SolidColorBrush b = new SolidColorBrush(Windows.UI.Color.FromArgb(255, (byte)r.Next(1, 255), (byte)r.Next(1, 255), (byte)r.Next(1, 255)));
        shape.shape.Fill = b;
        shape.shape.Stroke = b;
        Cann.Children.Add(shape.shape);

其中Cann是画布对象,shape.shape是矩形。

我的问题是,这些绘制方法与表格之间的根本区别是什么?

1 个答案:

答案 0 :(得分:2)

WPF和GDI / GDI +之间的基本区别

Windows Presentation Foundation(WPF)与图形设备接口(GDI)和GDI +根本不同,要求以不同的方式处理编程的许多方面。本主题简要概述了主要差异。

<强>窗

使用GDI / GDI + API构建的应用程序使用许多窗口,并位于父窗口(MDI)下。在WPF中构建的应用程序有一个窗口。

计量单位

使用GDI / GDI + API构建的应用程序使用硬件像素作为度量单位。在这些应用中,随着显示设备的分辨率增加,所得图像减少。 WPF内置的应用程序使用与设备无关的单元(1/96英寸)作为度量单位。当系统的DPI为96时,两者是等价的。

控制定位

使用GDI +构建的应用程序使用绝对定位。调整父级的大小时,子元素不会随之调整大小。在WPF中构建的应用程序可以使用绝对,动态或数据绑定定位。无论是绝对定位还是动态定位,控件都相对于父元素定位。

图片基础

在GDI / GDI +中形成的图像是基于像素的光栅图像。在WPF中形成的那些可以是可缩放的矢量图像。

渲染引擎

GDI和GDI +都是基于Win32构建的。 GDI基于设备上下文的概念,其中应用程序获取设备上下文的句柄,并使用句柄以与设备交互。 GDI +是围绕GDI的包装器,它创建了一个C ++ Graphics对象。另一方面,WPF建立在DirectX上,这意味着它可以在执行绘图操作时利用硬件加速。

渲染模式

使用GDI和GDI +,渲染使用立即渲染:应用程序重新绘制失效的区域。在WPF中,渲染使用保留渲染:应用程序跟踪绘图信息,但系统执行绘制。

<强>绘画

使用GDI和GDI +,剪切用于确定已变为无效且需要绘制的区域的边界。在WPF中,绘画是从后到前进行的,并且组件相互涂漆。

钢笔和画笔

GDI和GDI +使用当前画笔和当前笔的概念。在WPF中,必须在每次绘图调用时传递画笔和笔。

绘制区域优化

绘制区域优化是使用GDI或GDI +绘画的重要部分。在WPF中,它不被考虑。

<强>事件

GDI和GDI +使用订阅/通知来使用事件和事件处理程序委托。 WPF使用冒泡,隧道和直接事件通知,事件在VisualTree中上下移动。

视频和音频

GDI +或Windows Forms不提供对视频和音频的直接支持,但必须通过Windows Media Player等媒体播放器获取。 WPF直接支持视频和音频。

source: http://www.leadtools.com/help/leadtools/v18/dh/to/leadtools.topics~leadtools.topics.differencesbetweengdiandwpf.html

相关问题