Workshop – Tại Sao Bạn Nên Chọn WPF Thay Cho Windows Forms

10 lý do tại sao nói WPF tốt hơn so với Windows Forms

tuanpham TabControl for WPF

Cùng một bản design gồm: 1 Label, 1 TextBox và 2 Button; nhưng để xem bạn phải tốn bao nhiêu dòng code

– Winform


Private Sub InitializeComponent()
{
Me.Label1 = New System.Windows.Forms.Label()
Me.txtFilmName = New System.Windows.Forms.TextBox()
Me.btnOK = New System.Windows.Forms.Button()
Me.btnCancel = New System.Windows.Forms.Button()
Me.GroupBox1 = New System.Windows.Forms.GroupBox()
Me.GroupBox1.SuspendLayout()
Me.SuspendLayout()
//
//Label1
//
Me.Label1.AutoSize = True
Me.Label1.Location = New System.Drawing.Point(20, 23)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(81, 13)
Me.Label1.TabIndex = 0
Me.Label1.Text = "Type film name:"
//
//txtFilmName
//
Me.txtFilmName.Location = New System.Drawing.Point(107, 20)
Me.txtFilmName.Name = "txtFilmName"
Me.txtFilmName.Size = New System.Drawing.Size(100, 20)
Me.txtFilmName.TabIndex = 1
//
//btnOK
//
Me.btnOK.Location = New System.Drawing.Point(57, 88)
Me.btnOK.Name = "btnOK"
Me.btnOK.Size = New System.Drawing.Size(75, 23)
Me.btnOK.TabIndex = 2
Me.btnOK.Text = "OK"
Me.btnOK.UseVisualStyleBackColor = True
//
//btnCancel
//
Me.btnCancel.Location = New System.Drawing.Point(144, 88)
Me.btnCancel.Name = "btnCancel"
Me.btnCancel.Size = New System.Drawing.Size(75, 23)
Me.btnCancel.TabIndex = 3
Me.btnCancel.Text = "Cancel"
Me.btnCancel.UseVisualStyleBackColor = True
//
//GroupBox1
//
Me.GroupBox1.Controls.Add(Me.txtFilmName)
Me.GroupBox1.Controls.Add(Me.Label1)
Me.GroupBox1.Location = New System.Drawing.Point(22, 15)
Me.GroupBox1.Name = "GroupBox1"
Me.GroupBox1.Size = New System.Drawing.Size(230, 56)
Me.GroupBox1.TabIndex = 4
Me.GroupBox1.TabStop = False
//
//frmFilm
//
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(276, 135)
Me.Controls.Add(Me.GroupBox1)
Me.Controls.Add(Me.btnCancel)
Me.Controls.Add(Me.btnOK)
Me.Name = "frmFilm"
Me.Text = "Films"
Me.GroupBox1.ResumeLayout(False)
Me.GroupBox1.PerformLayout()
Me.ResumeLayout(False)
}

– WPF

* Các bạn có thể thấy sự tương đồng giữa WPF và các layout của nền tảng khác

– Android

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical" >
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Hello, I am a TextView" />
    <Button android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello, I am a Button" />
</LinearLayout>

– Windows Phone

<Grid ShowGridLines="True" Margin="12,0,12,0">
    <Grid.RowDefinitions>
        <RowDefinition Height="auto" />
        <RowDefinition />
        <RowDefinition Height="auto" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <TextBox Text="1st row 1st column" TextWrapping="Wrap" Grid.Column="0" Grid.Row="0" />
    <TextBox Text="3rd row 1st column" TextWrapping="Wrap" Grid.Column="0" Grid.Row="2" />
    <Button Content="1st row 2nd column" FontSize="17" Grid.Column="1" Grid.Row="0" />
    <Button Content="3rd row 2nd column" FontSize="17" Grid.Column="1" Grid.Row="2" />
</Grid>

– Web

<body>
<table class="lamp">
<tr>
  <th>
    <img src="/images/lamp.jpg" alt="Note" style="height:32px;width:32px">
  </th>
  <td>
    The table element was not designed to be a layout tool.
  </td>
</tr>
</table>
</body>

1) Về phương diện tiếp cận và design

Khi bạn đã quen với việc thiết kế Web, bạn sẽ học WPF rất dễ, hoàn thành bản design nhanh chóng và chuẩn xác tuyệt đối so với việc dùng chuột ở Winform(code để design thì rất chậm)

– Winform

Kéo control và change thuộc tính

– WPF

Nếu bạn có khả năng gõ 10 ngón thì nó sẽ phát huy tác dụng triệt để

2) Khả năng tương thích về kích thước và vị trí neo

Khi bạn design và sau đó là code, bạn sẽ thấy, khi dùng WPF bạn sẽ ít phải canh chỉnh hơn. Winform dễ bị lệch vị trí hơn WPF

– Winform: là định vị tuyệt đối

Có thể thấy, các Button sẽ luôn ở ngay vị trí đó theo Ox, Oy và sẽ không tự động canh chỉnh khi khung chính thay đổi.

– WPF: là định vị tương đối

Nếu bạn có định hướng tốt khi design, Screen của WPF sẽ cho ta một sự linh hoạt nhất định cho các kích thước màn hình cũng như sự thay đổi về số control chen nhau. Có thể bạn sẽ thấy định vị tuyệt đối là nhanh hơn nhưng bạn nhầm to khi quy mô dự án là không nhỏ; chưa kể hiện nay kích thước màn hình là rất đa dạng.

WPF sẽ cho ta sự tương thích như các website hiện nay – có nhiều cách hiển thị cho nhiều thiết bị

3) WPF cho phép phát triển thành một website nhanh chóng

Khi bạn có một ứng dụng WPF, việc bạn nghĩ nó sẽ được phát triển trên nền web là hoàn toàn khả thi vì WPF dùng chung bộ thư viện với Silverlight

-> Ngoài ra: Một ứng dụng WPF lại cho ta cách thể hiện như một WebBrowser – tức load các Page lên trang chính(hình trên)

4) WPF cho phép Custom style, nhanh chóng, dễ dàng

Một button khác hình chữ nhật là rất khó làm với Winform, nhưng WPF thì button có thể là hình chữ THẬP, các button sẽ có cùng một kiểu nếu được Apply cùng style.

Style trong WPF có phần giống CSS của website. Điều này khó mà đạt được với Winform.

5) WPF là tương lai của .NET application

Tại sao tôi nói vậy, sau đây là 3 vấn đề

– Cộng đồng quốc tế đang chuyển sang WPF thay cho Winform

Trên đây là thống kê từ trang StackOverflow, số lượng câu hỏi về WPF là gần gấp đôi Winform – điều đó nói lên rằng chúng ta đang dần chú ý hơn WPF.

– Microsoft tin vào WPF

Dưới đây là hai ứng dụng khá quen thuộc, là cột móc của WPF và Winform. Tại sao?

VS 2010 được xây dựng hoàn toàn bằng WPF, bạn có tin không!

– Tốc độ, đơn giản

Cuối cùng, WPF thật sự nhanh chóng, đơn giản và hoàn hảo đến thời điểm hiện tại. Một khi bạn vượt qua một số trở ngại trong học tập bạn sẽ thấy nó hay đến mức nào. Bạn sẽ không phải loay hoay với những thứ quá tầm thường.

6) WPF cho phép Binding dữ liệu cực đỉnh.

Khi tương tác nhiều với Data, WPF là rất mạnh cho việc Binding Data. Bạn sẽ thấy đơn giản hơn nhiều khi Show data lên View.


Để binding data cho GridView trong Winform và WPF bạn cần làm gì? Load data:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
	// create a connection to Top Trumps database
	String cs = ConfigurationManager.ConnectionStrings["csMovies"].ConnectionString;
	SqlConnection cn = new SqlConnection(cs);

	try
	{
		// create a new dataset
		DataSet ds = new DataSet();

		// open the connection (not strictly necessary, as the
		// data adapter will do this when you use it anyway)
		cn.Open();

		// fill data tables
		SqlDataAdapter daMoviess = new SqlDataAdapter();
		daMoviess.SelectCommand =
		new SqlCommand("SELECT * FROM tblMovies WHERE PackId=1", cn);
		daMoviess.Fill(ds, "Movies");

		// now set the data context for the entire window
		this.DataContext = ds;
	}
	catch (Exception ex)
	{
		MessageBox.Show(ex.Message);
	}
	finally
	{
		// close the connection whether went wrong or not
		cn.Close();
	}
}

WPF binding thế nào

7)  Đơn giản trong quản lý và thiết kế Control

Khi tôi làm việc với WPF trong thời gian dài và tiếp cận Winform tôi thấy rằng thật sự khó khăn hơn cho việc Design và quản lý các control Document Outline

Các control được tổ chức dạng cây

8) Triggers

Một trong những sự mới mẻ của WPF đó là Triggers – cho phép chúng ta tạo ra các ứng dụng linh hoạt hơn, gần gũi hơn với người dùng. Bạn có để ý thấy một TextBox yêu cầu nhập số nhưng bạn nhập chữ nó sẽ cảnh báo ngay lập tức – với WinForm bạn làm được nhưng tốn nhiều time hơn, thiếu linh động và khó cho sự thay đổi sau này, đặc biệt rất trực quan.

– TextBox có Background màu hồng khi rê chuột vào.

Chỉ cần bao nhiêu đây code

9) Hoạt họa và chuyển động trong WPF

Nếu có yêu cầu làm một vài Slide PowerPoint bằng .NET application, bạn sẽ làm thế nào với các chuyển động trong PowerPoint, Nếu dùng Winform bạn sẽ dùng timer chạy để set vị trí, và cần bao nhiêu timer cho 20 đối tượng… chỉ bao nhiêu đấy thôi bạn sẽ thấy khó khăn.

– Tôi có ví dụ sau: các button dùng để control một hình tròn. Start để hình tròn chạy

– Điều tôi phải làm là

Không cần code C# thấy không. Ngoài ra bạn cũng có thể làm phim hoạt hình với WPF, SlideShow ảnh …

10) Drawing và 3D

Windows Forms không cho Draw hay 3D. WPF cho phép thế điều đó rất tốt.

– Xoay đối tượng

– Load một file 3D vẽ bằng 3DMAX

 Và còn nhiều hơn những thứ hay ho khác ở WPF

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google photo

Bạn đang bình luận bằng tài khoản Google Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s