C# WPF vs WinForm

本文深入探讨了WPF和WinForm的区别与应用,通过实例代码展示了两者在界面设计、编程方式、命名空间、控件实现等方面的差异,并附有详细注释帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C# WPF vs WinForm

  WPF,WCF  如雷贯耳 早听说 WPF,WCF大名,但是就是一直没有去了解她……今天突然想去看看她长啥样?

 主要是给自己留个笔记,顺便比较下WPF和Winform之前的区别

1.什么是WPF?有什么用?

  定义:Windows Presentation Foundation(WPF){ [,prezən'teiʃən, ,pri:-] n. 描述,陈述;介绍;赠送、 [faun'deiʃən] n. 基础;地基;基金会;根据;创立}微软推出的基于Windows Vista的用户界面框架,属于.NET Framework 3.0的一部分。它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作;同时它提供了全新的多媒体交互用户图形界面。

  作用: 具体可以看看官网或者去百科看看

Eg:

后台代码

复制代码
/*
 * 
 * 第 34章 Windows Presentation Foundation 
 * 
 */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;

//添加对程序集WindowsBase、PresentationCore和 PresentationFramework的引用
namespace _5ConsoleApplication1
{
    class Program
    {
        //STAThread:Single     Thread     Apartment Thread.(单一线程单元线程)
        //[]是用来表示Attributes;
        //是一种线程模型,用在程序的入口方法上(在C#和VB.NET里是Main()方法),来指定当前线程的ApartmentState 是STA。用在其他方法上不产生影响。在aspx页面上可以使用AspCompat = "true" 来达到同样的效果。这个属性只在  Com  Interop  有用,如果全部是  managed  code  则无用。简单的说法:[STAThread]指示应用程序的默认线程模型是单线程单元 (STA)。启动线程模型可设置为单线程单元或多线程单元。如果未对其进行设置,则该线程不被初始化。也就是说如果你用的.NET Framework,并且没有使用COM Interop,一般不需要这个Attribute。其它的还有MTA(多线程套间)、Free  Thread(自由线程)
        [STAThread]
        static void Main(string[] args)
        {
            Window mainWindow = new Window();
            Canvas canvas = new Canvas();// ['kænvəs] n. 帆布vt. 用帆布覆盖,用帆布装备
            mainWindow.Content = canvas;
            mainWindow.Title = "WPF Application";
            Button button1 = new Button();
            canvas.Children.Add(button1);
            //WPF元素也可以从父元素中获得特性。例如,如果 Button元素位于 Canvas元素中,按钮的 Top
            //和Left属性把父元素的名称作为前缀。这种属性称为附带属性: 
            Canvas.SetLeft(button1, 140);
            Canvas.SetTop(button1, 130);
            button1.Content = "Click me!";
            //mainWindow.Content = button1; 
            button1.Click += (sender, e) => MessageBox.Show("Button clicked");
            Application app = new Application();// Application类的Run()方法负责处理 Windows消息。
            app.Run(mainWindow);
        }
    }
}
复制代码

运行结果:

  

猛地一看和WinForm的区别还真看不出来……

 

 

再贴一个前台代码

复制代码
<Window x:Class="_6WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Grid>
        
    </Grid>
</Window>
复制代码

 

 

 

2.看看代码大致可以总结出以下几点区别

1、WPF的一个主要特性是设计人员和开发人员的工作很容易分开。设计人员的工作成果可以直接供开发人员使用。 设计人员可以使用Expression Blend工具,开发人员则使用Visual Studio 2008【前提是必须理解XAML】

  XAML:XML for Applications Markup Language(XAML)  用于定义用户界面的层次结构

2、WPF的编程非常类似于Window窗体的编程,其区别是按钮有 Content属性,而不是Text属性

3、命名空间:

    Windows窗体类位于 System.Windows.Forms命名空间

    WPF类位于 System.Windows命名空间及其子命名空间中 

 

 4、Windows窗体控件基于Windows内置控件,利用了基于屏幕像素的Windows句柄。而WPF基于DirectX。应用程序不再使用Windows句柄,更便于重新设置 UI的大小,并内置了音频和视频的支持。

 

5、WPF,WinForm :萝卜青菜各有所爱

 

革命尚未成功,如果想有所造诣还得继续啃书+练习 我这里只是记录我的学习笔记。。。祝你成功

 

复制代码
<Window x:Class="_6WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="想有所造诣还得继续前进" Height="300" Width="300">
        <Canvas> 
            <Ellipse  Canvas.Left="50"  Canvas.Top="50"  Width="100"  Height="100" 
            Stroke="Blue" StrokeThickness="4" Fill="Yellow" /> 
            <Ellipse Canvas.Left="60" Canvas.Top="65" Width="25" Height="25" 
            Stroke="Blue" StrokeThickness="3" Fill="White" /> 
            <Ellipse Canvas.Left="70" Canvas.Top="75" Width="5" Height="5" 
            Fill="Black" /> 
            <Path Stroke="Blue" StrokeThickness="4" Data="M 62,125 Q 95,122 
            102,108" /> 
            <Line X1="124" X2="132" Y1="144" Y2="166" Stroke="Blue" 
            StrokeThickness="4" /> 
            <Line X1="114" X2="133" Y1="169" Y2="166" Stroke="Blue" 
            StrokeThickness="4" /> 
            <Line X1="92" X2="82" Y1="146" Y2="168" Stroke="Blue" 
            StrokeThickness="4" /> 
            <Line X1="68" X2="83" Y1="160" Y2="168" Stroke="Blue" 
            StrokeThickness="4" /> 
        </Canvas> 
</Window>
转自:http://www.cnblogs.com/PEPE/archive/2012/08/10/2631777.html
### C#WPFWinForms 的区别及应用场景 #### 主要技术差异 Windows Presentation Foundation (WPF) 是一种用于构建 Windows 客户端应用程序的现代框架,而 Windows Forms (WinForms) 则是一种较早的技术。两者都允许开发者创建图形用户界面(GUI),但在实现方式和技术特性上存在显著不同。 - **架构设计** - WPF 基于 XAML(可扩展的应用程序标记语言)[^1],这是一种声明式的 XML 文本格式,用来描述 UI 结构及其行为。XAML 提供了一种直观的方式来定义控件布局、样式以及动画效果。 - WinForms 使用传统的编程模型来绘制和管理窗口部件(widgets), 这意味着大多数情况下需要通过代码手动设置属性并处理事件[^2]。 - **性能表现** - 尽管 WPF 可能会因为其丰富的功能集而导致某些场景下的启动时间稍慢一些,但它利用硬件加速渲染图像,在复杂视觉效果方面往往优于 WinForms[^3]。 - **数据绑定支持** - 数据绑定是 WPF 的一大亮点之一;它提供了更强大灵活的数据源连接机制,使得双向同步变得简单易行。相比之下,虽然 WinForms 也具备基本的数据绑定能力,但灵活性较低[^4]。 - **外观定制化程度** - 对于追求高度自定义UI体验的应用来说,WPF 显得更加适合。由于采用了基于向量图标的矢量化绘图引擎,因此可以轻松调整大小而不失真,并且能够方便地应用皮肤主题改变整个应用程序风格[^5]。 - 而对于那些只需要标准控件组合而成的传统桌面软件而言,WinForms 已经足够满足需求,而且开发效率较高[^6]。 #### 应用场景分析 当考虑具体项目时,选择哪种技术取决于多个因素: - 如果目标平台仅限于 .NET Framework 并且希望获得更好的用户体验(如流畅过渡、动态特效)、更高的交互性和更容易维护的设计,则应优先选用 WPF[^7]。 - 当快速原型制作或是对现有 WinForms 解决方案进行增量改进时,继续沿用 WinForms 或者逐步迁移到 WPF 都是可以接受的选择[^8]。 - 在跨平台兼容性的背景下,考虑到 Xamarin.Forms 等工具的存在,如果计划未来可能移植到其他操作系统上的移动设备或Web浏览器内运行的话,那么初期就应当倾向于采用更为通用的语言环境编写业务逻辑层[^9]。 ```csharp // 创建简单的 WPF 应用程序入口点 public partial class App : Application { protected override void OnStartup(StartupEventArgs e){ base.OnStartup(e); MainWindow mainWindow = new(); mainWindow.Show(); } } // 创建简单的 WinForms 应用程序入口点 static class Program{ [STAThread] static void Main(){ Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值