Blog chia sẽ kinh nghiệm lập trình và Technical VN. Nơi mà các bạn có thể học tập và tham khảo về những công nghệ mới nhất hiện nay về .NET
Thứ Ba, 26 tháng 5, 2015
10 lý do tại sao nói WPF tốt hơn so với Windows Forms
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
- Windows Phone
- Web
![]() | The table element was not designed to be a layout tool. |
|---|
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?
Vì 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();
}
}
Và 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
Hôm nay tôi sẽ giới thiệu đến các bạn một thư viện mã nguồn mở, nó là gì? Đơn giản là một thư viện với TabControl được Custom lại với nhiều tính năng hơn.
I> Giới thiệu
Cùng với sự phát triển mạnh mẽ của WPF, cộng đồng mã nguồn mở đã phát triển nhiều bộ thư viện hay, một trong những điều chúng ta thấy là WPF cho phép chúng ta Custom nhiều hơn và đơn giản hơn theo một Logic của Microsoft. Và, bộ thư viện này cũng vậy, nó được James Willock phát triển với nhiều tính năng hay cho TabControl mà bạn không ngờ tới.Bạn có thể tải về Dll với Nuget
Install-Package Dragablz
Source code được đạt tại GitHub và bạn có thể tải về để phát triển tiếp.
I> Một số điểm mới của Tabcontrol
Các bạn thể xem qua một số tính năng sau đây, ngoài ra chúng ta còn có thể làm việc với mô hình MVVM- Hỗ trợ Drag

- Change theme

- MDI - đã hỗ trợ Optional CloseButton(theo request của tôi)

Cách dùng vô cùng đơn giản. Chúng ta tải về bộ thư viện sau đó add reference và sử dụng:
Các bạn có thể xem thêm các Samplez tại trang GitHub
Phạm Tuân
Chủ Nhật, 5 tháng 4, 2015
Data Binding là kĩ thuật dùng để tạo gắn kết giữa phần giao diện (UI) và dữ liệu thông qua phần business logic hoặc giữa các đối tượng UI với nhau. Nhờ Data Binding, UI có thể tự động cập nhật lại để hiển thị các thay đổi trong dữ liệu mà không cần sự can thiệp từ code behind.Ngoài ra, Data Binding trong WPF còn hỗ trợ các chiều khác nhau, nghĩa là các thay đổi có thể cập nhật từ UI vào dữ liệu hay ngược lại.
I> Giới thiệu
Binding mode sẽ chỉ ra hướng mà dữ liệu sẽ được cập nhật. Bao gồm 5 giá trị từ enum BindingMode là:
| Name | Description |
| OneWay | Cập nhật target property theo source property |
| TwoWay | Cập nhật hai chiều giữa target property và source property. |
| OneTime | Khởi tạo target property từ source property. Sau đó việc cập nhật dữ liệu sẽ không được thực hiện. |
| OneWayToSource | Giống OneWay nhưng theo hướng ngược lại: cập nhật từ target property sang source property. |
| Default | Hướng binding dựa trên target property. Với target property mà người dùng có thể thay đổi giá trị (như TextBox.Text) thì nó là TwoWay, còn lại là OneWay |
* Nhưng khi nào thì dữ liệu sẽ bắt đầu được cập nhật, chúng ta sẽ nói sau về phần UpdateSourceTrigger
Ví dụ: Giả sử tôi muốn cập nhật nội dung của một TextBox theo giá trị được nhập vào TextBox khác. Cửa sổ minh họa cho ví dụ này cần hai control chính là txtHvà txtS:
Bản chất của việc tạo binding bao gồm 2 bước:
-Tạo một đối tượng System.Windows.Data.Binding và thiết lập các giá trị cần thiết.
-Gọi phương thức instance FrameworkElement.SetBinding() của target binding. FrameworkElement được thừa kế từ UIElement và là lớp cha của các control trong WPF. Phương thức này có tham số đầu tiên là một dependency property.
Bạn có thể tạo trong XAML theo cách thông thường sau:
Tuy nhiên, XAML còn hỗ trợ một dạng cú pháp gọn hơn với cùng chức năng như đoạn mã trên:
Kết quả:
Thứ Bảy, 4 tháng 4, 2015
1. WPF là gì?WPF, viết tắt của Windows Presentation Foundation, là hệ thống API mới hỗ trợ việc xây dựng giao diện đồ hoạ trên nền Windows. Được xem như thế hệ kế tiếp của WinForms, WPF tăng cường khả năng lập trình giao diện của lập trình viên bằng cách cung cấp các API cho phép tận dụng những lợi thế về đa phương tiện hiện đại. Là một bộ phận của .NET Framework 3.0, WPF sẵn có trong Windows Vista và Windows Server 2008. Đồng thời, WPF cũng có thể hoạt động trên nền Windows XP Service Pack 2 hoặc mới hơn, và cả Windows Server 2003.
- Cung cấp một nền tảng thống nhất để xây dựng giao diện người dùng;
- Cho phép người lập trình và người thiết kế giao diện làm việc cùng nhau một cách dễ dàng;
- Cung cấp một công nghệ chung để xây dựng giao diện người dùng trên cả Windows và trình duyệt Web
Mỗi phần tử XAML lại tương ứng với một lớp WPF, và mỗi thuộc tính của phần tử đó lại tương ứng với thuộc tính hay sự kiện của lớp này. Chẳng hạn, nút bấm màu đỏ trong ví dụ trên có thể tạo bằng C# code như sau:
Search
Popular Posts
-
Phong cách thiết kế Material Design nhắm đến những đường nét đơn giản, sử dụng nhiều mảng màu đậm nổi bật, các đối tượng đồ họa trong giao ...
-
ReSharper là một công cụ Add-on cho Visual Studio, nó giúp lập trình viên tốn ít thời gian cho việc xem xét định dạng code, phong cách code,...
-
Để dễ hiểu, các bạn hãy hình dung rằng: cùng một tập tin thực thi *.EXE nhưng bạn DoubleClick 10 lần cách quãng vào nó thì chuyện gì sẽ sảy ...
-
Hôm nay tôi sẽ giới thiệu đến các bạn một thư viện mã nguồn mở, nó là gì? Đơn giản là một thư viện với TabControl được Custom lại với nhiều ...
-
Hôm nay tôi sẽ giới thiệu với các bạn một Framework đến từ Microsoft - framework này không quá lớn nhưng là khá mạnh khi các bạn làm việc vớ...
-
Một khía cạnh hết sức quan trọng trong WPF đó là Trigger - Trigger giúp nắm bắt được mọi thay đổi trong một hệ thống GUI của WPF. Nhờ có Tr...
-
Như ở bài trước tôi đã giới thiệu về caliburn.mocro, bài tiếp theo này tôi sẽ hướng dẫn các bạn về cách tạo một project WPF hợp chuẩn mô hìn...
-
Hôm nay chúng ta sẽ tìm hiểu cách tạo ra các menu chuột phải trên ứng dụng WPF của mình. Ở bài này chúng ta xoay quanh việc tìm hiểu cách tạ...
-
Ở phần trước tôi đã giới thiệu sơ qua cách hình thành một Modern UI căng bản cho ứng dụng WPF, bài tiếp theo này tôi sẽ hướng dẫn chi tiết ...
-
Tôi xin giới thiệu một số công cụ miển phí tôi hay dùng để thiết kế UML - tính năng khá đầy đủ và có nhiều sự lựa chọn cho mục đích thiết k...
