Tổng Quan WPF

WPF (Windows Presentation Foundation) là thư viện lập trình giao diện đồ họa có trong Microsoft.NET Framework từ phiên bản 3.0. Được xây dựng trên nền Direct3D, WPF phát huy tối đa sức mạnh xử lý của card đồ họa, hỗ trợ các cải tiến về giao diện trong Windows Vista, Windows 7 vàđộc lập với mọi độ phân giải của màn hình. WPF kế thừa và mở rộng các đặc trưng phát triển ứng dụng bao gồm: ngôn ngữ đánh dấu ứng dụng mở rộng (Extensible Application Markup Language – XAML), các điều khiển (control), tác hợp dữ liệu (data binding), bố cục, đồ họa 2D và 3D, hoạt hình, kiểu dáng (style), mẫu (template), tài liệu, đa phương tiện (âm thanh, hình ảnh), văn bản và in ấn. Ứng dụng WPF có thể được biên dịch để chạy trên desktop hoặc thông qua trình duyệt web phổ biến như IE, Firefox, Safari. Do đó WPF không chỉ dành cho các ứng dụng desktop, nó còn cho phép phát triển các ứng dụng web phong phú (Rich Internet Application – RIA). Ngoài ra WPF cung cấp một mô hình lập trình nhất quán cho việc phát triển ứng dụng và cung cấp sự tách biệt rõ ràng giữa giao diện người dùng và logic nghiệp vụ.

 

1. SO SÁNH WPF VÀ CÁC CÔNG NGHỆ KHÁC

1.1 So sánh WPF và Silverlight

Silverlight và WPF đều cho phép phát triển ứng dụng có giao diện người dùng phong phú dựa trên XAML và .NET Framework. Tuy nhiên giữa 2 nền tảng này có những điểm khác biệt bao gồm kiến trúc.

Silverlight là công nghệ đa trình duyệt dựa trên nền .NET Framework, giúp phát triển các ứng dụng có nội dung phong phú và đa phương tiện tương tác qua trình duyệt, có thể tích hợp nhiều dữ liệu và dịch vụ từ nhiều nguồn. Tương tự như WPF, Silverlight sử dụng ngôn ngữ XAML để xác định giao diện người dùng.

Về phần kiến trúc, WPF dựa trên .NET Framework đầy đủ và thực thi trên Common Langue Runtime (CLR) còn Silverlight chỉ dựa trên tập hợp con của .NET Framework và XAML, việc thực thi dựa trên CLR của trình duyệt web.

1

 

 WPF

  • Thực thi như một phần của .NET Framework (version 3.0 hoặc hơn)
  • Hoạt động như một ứng dụng Windows hoặc một “Ứng dụng trình duyệt” web (được gọi là XBAP , trên ứng dụng trình duyệt XAML). XBAP chỉ hoạt động trên Internet Explorer (.NET 3.0).
  • Chỉ chạy trên các máy tính Windows (Windows XP, Windows Server 2003, Windows Vista, and Windows Server 2008)
  • Giàu tính năng, bao gồm đồ họa 3D.

Silverlight

  • Thực thi độc lập
  • Chỉ thực thi trên trình duyệt web (Internet Explorer, FireFox, Safari)
  • Chạy trên hệ điều hành Windows hoặc MAC
  • Tính năng là một tập hợp con các tính năng của của WPF
  • Cần có browser plugin.

 

2. KIẾN TRÚC WPF

Windows Presentation Framework là một giao diện người dùng khung thế hệ tiếp theo để tạo ra các ứng dụng với một trải nghiệm người dùng phong phú. Nó là một phần của NET framework 3.0 và cao hơn.. Kiến trúc WPF là một kiến ​​trúc lớp đã được quản lý, các lớp API Không quản lý và Core như thể hiện trong hình dưới đây.

wpf2

 

2.1 Lớp quản lý (Managed Layer)

Lớp quản lý có hai thành phần chính – Presentation Framework và Presentation Core.

Presentation Framework cung cấp các chức năng cần thiết mà chúng ta cần phải xây dựng các ứng dụng WPF như điều khiển, liên kết dữ liệu, kiểu dáng, hình dạng, tài liệu, chú thích, hình ảnh động và nhiều hơn nữa. PresentationFamework.dll chịu trách nhiệm cho mục đích này.

Presentation Core hoạt động như một wrapper quản lý xung quanh MILCore và cung cấp giao diện công cộng cho MIL. Trình bày Core là các nhà cho WPF Visual System và cung cấp các lớp để tạo ra ứng dụng visual tree. Hệ thống Visual tạo ra visual tree. PresentationCore.dll chịu trách nhiệm cho mục đích này.

2.2 Lớp không được quản lý (Unmanaged Layer)

Lớp này cũng được gọi là milcore hoặc Media tích hợp Thư viện Core. MilCore được viết bằng mã không được quản lý để cho phép tích hợp chặt chẽ với DirectX. DirectX động cơ nằm bên dưới công nghệ được sử dụng trong WPF để hiển thị tất cả các đồ họa, cho phép phần cứng hiệu quả và cung cấp phần mềm. MIL có hệ thống phần tiếp nhận hướng dẫn vẽ từ Visual hệ thống và chuyển thành dữ liệu có thể được hiểu bởi DirectX để làm cho giao diện người dùng.

2.3 Lớp API Lõi (Core API Layer)

Lớp này có các thành phần cốt lõi hệ điều hành như hạt nhân, user32, GDI, điều khiển thiết bị, card đồ họa, vv Những thành phần được sử dụng bởi các ứng dụng truy cập các API mức thấp. User32 quản lý bộ nhớ và quá trình tách.

 

3. KHÁI NIỆM THIẾT KẾ GIAO DIỆN

3.1 Styling and Templating

WPF cung cấp 2 khái niệm Style và Template cho phép xây dựng các mẫu thuộc tính nhằm áp dụng cho nhiều đối tượng giao diện người dùng.

3.1.1 Styling

Thành phần Style cho phép người lập trình tạo ra một tập hợp lưu trữ định dạng thuộc tính và lưu trữ trong Resource hoặc thư mục Resource riêng của Project. Tương tự như cách hoạt động CSS trong lập trình Web. Các thuộc tính quan trọng nhất trong thành phần Style là BaseOn, TargetType, SettersTriggers.

wpf3

Khi định nghĩa tài nguyên Style trong XAML ta dùng thuộc tính khóa x:Key, khi một đối tượng muốn sử dụng Syle này ta dùng thuộc tính khóa đển tham chiếu đến. Tất cả các file tài nguyên phải được khai báo trong file App.xaml của project.

wpf4

Một Style có thể được kế thừa từ một Style khác và thừa hưởng các thuộc tính từ Style cơ sở.

wpf5Style “ButtonMenu” kế thừa từ “ButtonStyle

Thuộc tính TargetType của Style dùng để quy định kiếu đối tượng ảnh hưởng. Nếu chọn TargetType là Control, tất cả các đối tượng control đều có thể sử dụng.

wpf6

 Khai báo một Style có thể dùng cho tất cả các đối tượng control

Thuộc tính dùng để gán thuộc tính hoặc sự kiện trong Style. Khi gán thuộc tính, ta đặt vào tên thuộc tính (Properties) và giá trị (Value). Khi muốn thiết lập một event, ta dùng thuộc tính EventSetter để gán tên và hàm xử lý sự kiện.

wpf7

 Thiết lập thuộc tính và sự kiện cho Style

 Trong WPF đối tượng Trigger dùng để thay đổi thuộc tính giao diện khi những điều kiện nhất định được thỏa mãn.

wpf8

 

Thiết lập Triggers cho ButtonStyle khi click

 *Một số loại Triggers khác sử dụng trong Style:

DataTrigger: Đối tượng DataTrigger sẽ thay đổi thuộc tính hoặc thực thi hành động khi dữ liệu liên kết thỏa mãn điều kiện định trước.

Multitrigger: Đối tượng Multitrigger có thể thiết lập nhiều điều kiện định trước để kích hoạt hành động.

3.1.2 Template

Trong WPF bằng việc sử dụng khái niệm Template, người lập trình có thể tạo ra các controls có hình dáng riêng hay hình thức trình bày riêng cho giao diện. Có 2 dạng khuôn mẫu được sử dụng: ControlTemplate dùng để định lại cấu trúc hiển thị cho điều khiển UI và DataTemplate dùng  để định ra cách thức hiển thị dữ liệu

ControlTemplate.

Trong WPF, các thành phần của controls được phân chia theo:

  • Logic: định nghĩa các trạng thái , sự kiện và thuộc tính.
  • Template: định nghĩa diện mạo của control.

Sự liên kết giữa Logic và Template được thực thi bởi cơ chế DataBiding. Mỗi control có một default template. Control template thường được bao gồm trong một Style và ràng buộc với những thuộc tính thiết lập khác.

 

4. CÁC TÍNH NĂNG NỔI BẬT

4.1 DataBinding Overview

WPF data binding cung cấp một phương pháp đơn giản và thích hợp để trình bày và tương tác với dữ liệu. Các phần tử có thể được liên kết đến dữ liệu nguồn (Data Sources) từ một biến giá trị của dữ liệu nguồn. Ngòai ra DataBinding rất hữu hiệu trong việc tự động cập nhật dữ liệu giữa business model và giao diện người dung.

DataBingding có thể 1 chiều  (source -> target hoặc target <- source) hoặc 2 chiều (source <-> target). Source của một databinding có thể  là một thuộc tính thông thường hoặc một thuộc tính phụ thuộc. Thuộc tính target của một databinding bắt buộc phải là thuộc tính phụ thuộc.

wpf9

Binding 2 chiều

 Binding Mode

  • 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 dung có thể thay đổi giá trị (như TextBox.Text) thì nó là TwoWay, còn lại là OneWay.

wpf10

Ví dụ binding dữ liệu giữa Textbox và Label

Update Source Trigger

Khi 2 thuộc tính được binding với nhau, khi 1 bên thay đổi bên còn lại sẽ được update. 2 chế độ Binding OneWay và TwoWay, thuộc tính Binding.UpdateSourceTrigger cho phép thiết lập thời điểm binding source sẽ được cập nhật. Enum UpdateSourceTrigger gồm 4 giá trị:

  • Default: Đa số các dependency property sẽ được dùng giá trị PropertyChanged, còn với property Textsẽ có giá trị là LostFocus.
  • PropertyChanged: Cập nhật binding source khi binding target property thay đổi.
  • LostFocus: Cập nhật binding source khi binding target mất focus.
  • Explicit: Cập nhật binding source chỉ khi bạn gọi phương thức UpdateSource.

DataContext Property

Mọi control bắt nguồn từ FrameworkElement có một thuộc tính DataContext. Thuộc tính này được hiểu được thiết lập để các đối tượng dữ liệu nó hình dung. Nếu không xác định rõ source của binding, dữ liệu sẽ lấy theo mặc định.

Các thuộc tính DataContext thừa hưởng giá trị của nó đến các phần tử con. Vì vậy, ta có thể đặt DataContext trên một layout chứa và giá trị của nó được kế thừa cho tất cả các phần tử con.

wpf11

wpf12

 Binding dữ liệu với 2 Text block

wpf13

 

4.2 Resource

Một resource là một đối tượng có thể tái sử dụng ở nhiều nơi khác nhau trong ứng dụng. WPF hỗ trợ nhiều loại resource, trong đó 2 loại chính là : XAML resourcesresource data files. Resource thường được dùng để định nghĩa các Style hoặc Template.

Resource Dictionary là cách lưu trữ các resource theo dạng hash table. Mỗi phần tử trong resource là một đối tượng do đó ta có thể truy xuất thông qua chỉ thị x:Key. Đây là cách hữu hiệu để tách rời các resource Style, Template, … thành các file XAML riêng biệt để dễ dàng quản lý và tái sử dụng.

            Resource Dictionary là một template trong Visual Studio, vì vậy ta có thể tạo một file XAML dạng Resource Dictionary bằng cách thêm mới một Item <Resoure Dictionary>

wpf14

 File Resource Dictionary định nghĩa một control template

 wpf15

 Khai báo một Resource Dictionary trong App.xaml

 

wpf16

 Sử dụng Template đã khai báo

wpf17

 Kết quả hiển thị

 

 

So sánh Static Resource Dynamic Resource:

Các đặc điểm khác biệt chính của hai loại resource này là:

  • Static Resource sẽ mang một giá trị duy nhất mỗi lần khởi tạo trong khi Dynamic Resource có thể được gọi nhiều lần mỗi khi cần thiết trong quá trình biên dịch.
  • Dynamic Resource thực thi hiệu quả hơn Static Resource vì việc lấy dữ liệu tài nguyên xảy ra mỗi khi nó yêu cầu hoặc cần thiết.
  • Static Resource có tốc độ nhanh hơn tuy nhiên phát sinh thêm thời gian khởi tạo khi load page hoặc windows hơn Dynamic Resource.

 

5. TỔNG KẾT

Qua những nội dung đã tìm hiểu, có thể thấy rằng WPF có những tính năng vượt trội giúp cho các lập trình viên và người thiết kết giao diện có thể làm việc với nhau tốt hơn. Khả năng thiết kế trình bày giao diện tốt hơn do sử dụng công nghệ XAML, do đó việc bảo trì và tái sử dụng rất dễ dàng. Khả năng xử lý đồ họa cho phép tạo ra các ứng dụng có trải nghiệm tốt hơn các phương pháp phát triển giao diện truyền thống như Windows Form.

Ngoài ra WPF hỗ trợ rất mạnh cơ chế kết nối như Data Binding  giúp cho việc móc nối dữ liệu và xử lí trở nên linh hoạt hơn rất nhiều. Mô hình xử lý Command hỗ trợ quá trình xử lý nghiệp vụ tốt hơn trong mô hình MVVM.

Advertisements

One thought on “Tổng Quan 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 )

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 )

Google+ photo

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

Connecting to %s