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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM