• Thứ Ba, 12/01/2010 16:34 (GMT+7)

    WPF thư viện giao diện kế tiếp Windows Form

    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ụ.

    Nền tảng thống nhất để xây dựng giao diện

    Hình 1: Tương tác giữa nhà thiết kế và lập trình viên thông qua XAML

    Thực tế cho thấy các ứng dụng desktop vẫn được phát triển mạnh mẽ vì tính sẵn dùng, bảo lưu trạng thái giữa các giao dịch, độ tin cậy, bảo mật dữ liệu và khả năng phát huy tối đa hiệu suất của phần cứng.

    Trước WPF, xây dựng một ứng dụng Windows với nhiều yêu cầu phức tạp đòi hỏi sử dụng nhiều công nghệ khác nhau (Xem Bảng đối chiếu các công nghệ hiện có trong WPF).

    Để tạo ra ứng dụng với các Form và Control, lập trình viên thường chọn Windows Forms. Tuy nhiên nếu ứng dụng đòi hỏi một số tính năng riêng biệt như: hình ảnh 2 chiều, 3 chiều, đa phương tiện…, chúng ta cần thêm các thư viện GDI+, Windows Media Player, DirectX... Điều này trở nên phức tạp và rắc rối, khó bảo trì. Trong khi chúng ta có thể sử dụng WPF để phát triển ứng dụng đáp ứng được tất cả các yêu cầu trên. Vậy tại sao không sử dụng một nền tảng công nghệ duy nhất để xây dựng ứng dụng giao diện người dùng, hơn là sử dụng nhiều công nghệ riêng biệt.

    Bảng đối chiếu các công nghệ hiện có trong WPF

    Cộng tác hiệu quả

    WPF sử dụng XAML để thể hiện giao diện. XAML định nghĩa một tập các thành phần XML như Button, TextBox, Label… để xác định cách thức hiển thị của các control trên giao diện. Rõ ràng, việc mô tả giao diện dưới dạng XML sẽ dễ dàng hơn so với mã lệnh (code) (Xem hình 1).

    Hình 2: Data template

    Ngoài ra XAML có thể sửa đổi bằng rất nhiều công cụ phát triển như Visual Studio, Expression Blend, XAMLPad... Do đó WPF cho phép các thành viên của đội phát triển và thiết kế có thể làm việc với nhau trên cùng một file mà không cần phải thông qua một file ảnh tĩnh như trước đây. Theo cách này, nhà thiết kế xây dựng các giao diện phức tạp bằng Expression Blend. Toàn bộ thiết kế sẽ được công cụ sinh ra các thể hiện dưới dạng XAML. Nhà phát triển chỉ việc sử dụng các đoạn mã XAML này với công cụ như Visual Studio 2008 để viết các xử lý logic cho ứng dụng, mà không cần phải thiết kế lại.

    Công nghệ web cho ứng dụng desktop

    WPF cho phép thay đổi giao diện ứng dụng một cách dễ dàng và tùy ý thông qua các template. Chúng ta có thể định nghĩa lại cách hiển thị truyền thống của các control, cũng như cách mà một đối tượng được hiển thị trên giao diện (Xem hình 2).

    WPF tạo ra sự đột phá trong việc thể hiện giao diện một cách hiện đại và thông minh bằng style. Style trong WPF giống như CSS trong HTML nhưng nhiều tính năng và rõ ràng hơn. Với việc hỗ trợ style, các ứng dụng WPF dễ dàng được làm mới hình thức, kiểu dáng mà không phải thay đổi mã lệnh, không phải biên dịch lại. Bởi lẽ WPF quản lý style thông qua những thuộc tính được định nghĩa trong XAML (Xem hình 3 và 4).

    Công nghệ desktop cho web

    Hình 3: Control template

    Với WPF, chúng ta có thể tạo ra các ứng dụng cho cả Windows và web. WPF sử dụng XBAP (XAML browser application) để tạo ra những ứng dụng có thể thực thi bên trong trình duyệt. Những ứng dụng này kết hợp các đặc trưng của cả ứng dụng web và desktop. Nó có thể được triển khai trên một máy chủ web và được thực thi thông qua trình duyệt web. Các ứng dụng XBAP hỗ trợ nhiều trình duyệt khác nhau như IE, Firefox. Giống như phát triển các ứng dụng desktop, XBAP thúc đẩy các điểm mạnh của WPF, và mang những lợi ích của các công nghệ desktop lên môi trường web(Xem hình 5).

    Tuy nhiên, việc thực thi XBAP yêu cầu phải cài đặt .NET Framework 3.0 trên hệ thống hoặc Silverlight. Silverlight là một thành phần mở rộng của WPF. Thực tế nó được đặt với một cái tên khác là WPF/E (WPF/Everywhere). Do đó lập trình viên có thể dễ dàng chuyển đổi giữa WPF client và Silverlight. Các ứng dụng Silverligtht giống như XBAP, được thực thi thông qua trình duyệt web. Nó là một thành phần gắn bên trong của trình duyệt, hỗ trợ đa nền tảng do đó có thể sử dụng ở bất kỳ môi trường hệ điều hành nào.

    Hỗ trợ hiển thị, in ấn

    Hình 4: Style trong WPF

    Khi tạo giao diện cho ứng dụng, chúng ta sắp xếp các control theo vị trí và kích cỡ của chúng trên khuôn bố cục của ứng dụng. Một yêu cầu chủ chốt với hầu hết các ứng dụng là tính tương thích với các thay đổi về kích cỡ và độ phân giải của màn hình. Việc triển khai yêu cầu này thực sự trở thành vấn đề đối với Windows Forms. Tuy nhiên, điều này trở nên dễ dàng hơn với WPF. Các control trong WPF được xử lý một cách tự động để có thể tương thích với mọi độ phân giải của màn hình. Hình ảnh được phóng to, thu nhỏ một cách dễ dàng mà không gặp phải vấn đề như vỡ khung hình đối với Windows Forms (Xem hình 6).

    Ngoài ra, những yêu cầu về trình bày văn bản, tài liệu và in ấn là không thể thiếu đối với các ứng dụng nghiệp vụ. Văn bản trong WPF được xử lý và hiển thị sử dụng Microsoft ClearType, khiến chúng trở nên rõ ràng và dễ đọc hơn. Với tài liệu, WPF cung cấp khả năng xử lý linh hoạt tùy thuộc vào mục đích sử dụng của chúng. Nội dung hiển thị được tối ưu hóa; toàn bộ nội dung được tự động điều chỉnh sao cho phù hợp với kích thước màn hình, độ phân giải của thiết bị cũng như ý muốn của người dùng. Ngược lại, nội dung in ấn được thiết kế độc lập với các thiết bị hiển thị và in ấn. Cấu trúc của trang in luôn luôn thống nhất theo thiết kế của người dùng trong mọi trường hợp, đồng thời tận dụng tối đa chất lượng của thiết bị in. WPF cung cấp sẵn bộ thư viện cho việc quản lý và thực hiện in. Nó cho phép tự động cài đặt, điều khiển, tìm kiếm và thiết lập các lựa chọn in ấn của máy.

    Giảm thiểu số dòng lệnh

    Hình 5: Ứng dụng WPF cho trình duyệt: XBAP

    Hầu hết các ứng dụng cung cấp cho người dùng khả năng truy cập dữ liệu, xem và sửa đổi. Thông thường yêu cầu này được thực hiện thông qua các bước gồm:

    - Sao chép dữ liệu từ các đối tượng được quản lý lên các control để có thể hiển thị và thay đổi chúng.

    - Đảm bảo những thay đổi dữ liệu trên các control được sao chép ngược trở lại các đối tượng được quản lý.

    Công việc xử lý logic cho giao diện như vậy chiếm thời gian và số lượng mã lệnh đáng kể của các ứng dụng ngày nay.

    Với WPF quá trình này được thực thi một cách tự động thông qua cơ chế tác hợp dữ liệu.

    Lấy ví dụ để thực hiện đưa dữ liệu về một Person lên form:

    Phía giao diện trước đây: Là một loạt các đoạn mã để khởi tạo giao diện cho các control.

    Phía mã thực thi trước đây:

    Person person = new Person("Quang", "Nguyen");
    public Window1()
    {
    InitializeComponent();

    //Đưa dữ liệu và các control một cách thủ công
    this.txtFirstName.Text = person.FirstName;
    this.txtLastName.Text = person.LastName;
    this.tblFullName.Text = person.FullName;
    }

    WPF phía giao diện: Khai báo dữ liệu được gắn cho các control thông qua XAML.

    < Window x:Class="WithBinding.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="With Binding" Height="212" Width="300" >
    < Grid Name="grid" >
    < !--Bind txtFirtName cho Person.FirstName-->
    < TextBox Name="txtFirstName" Text="{Binding Path=FirstName}" />
    < !--Bind txtLastName cho Person.LastName-->
    < TextBox Name="txtLastName" Text="{Binding Path=LastName}" />
    < TextBlock Name="tblFullName" Text="{Binding Path=FullName}" />
    < /Grid>
    < /Window>


    WPF phía mã thực thi:

    Person person = new Person("Quang", "Nguyen");
    public Window1()
    {
    InitializeComponent();
    //Đưa nguồn dữ liệu sẵn sàng cho binding
    this.DataContext = person;
    }

    Tách biệt phần hiển thị với phần logic

    Cơ chế Data Binding trong WPF khiến toàn bộ quá trình hiển thị dữ liệu lên các control giao diện được xử lý một cách tự động mà không cần đến sự can thiệp của các đoạn mã phía sau của control này. Lập trình viên chỉ cần sử dụng các mã được quản lý như C# hay VB.NET để truy cập và xử lý dữ liệu mang tính nghiệp vụ. Điều đó khiến phần xử lý logic của ứng dụng tách biệt hoàn toàn với phần hiển thị dữ liệu, tạo nên tính độc lập cho các thành phần này. Chúng ta có thể tách việc phát triển giao diện và xử lý logic thành các mô-đun cho những đội phát triển khác nhau. Những thay đổi về mặt giao diện không làm ảnh hưởng đến những xử lý nghiệp vụ của ứng dụng và ngược lại. Hơn nữa, nó cũng tạo điều kiện dễ dàng cho việc thực hiện “unit test” đối với giao diện của ứng dụng; công việc vốn rất khó thực hiện đối với các công nghệ trước đó như Windows Form.

    Tiết kiệm chi phí triển khai

    Hình 6: Xử lý font chữ và tài liệu trong WPF

    WPF cung cấp nhiều công cụ thuận tiện cho việc triển khai, cài đặt tùy thuộc vào kiểu ứng dụng. Với các ứng dụng thuần túy là các file XAML, không cần phải biên dịch, chúng ta có thể triển khai chúng trên website như với ASP.NET thông thường. Với các ứng dụng trình duyệt web XBAP, sử dụng dòng lệnh (command-line) trong XCopy hoặc đóng gói bằng Windows Installer để cài đặt cho khách hàng. Với các ứng dụng chạy độc lập chúng ta có thể đóng gói thông qua Windows Installer hoặc ClickOnce. Giống như Windows Installer, ứng dụng được triển khai sử dụng ClickOnce, có thể tích hợp với desktop, Start menu, dễ dàng cài đặt và gỡ bỏ thông qua “Add/Remove Programs” (trong Control Panel) trên máy khách hàng. Ngoài ra ClickOnce còn cho phép cài đặt ứng dụng trực tuyến thông qua web, tạo điều kiện thuận lợi cho khách hàng cập nhật các phiên bản của phần mềm nếu có. Nhờ vậy tiết kiệm chi phí đáng kể trong việc triển khai ứng dụng cho cả nhà phát triển cũng như khách hàng.

    Có rất nhiều công nghệ bạn có thể lựa chọn cho việc phát triển các ứng dụng Windows hiện nay như Windows Form, Visual C++/MFC, Win32, WPF. Trong đó phải kể đến Windows Form, một công nghệ được sử dụng rộng rãi và lâu đời (xấp xỉ 20 năm) bởi tính dễ dùng và nhỏ gọn; hay Visual C++/MFC (Microsoft Foundation Classes) cho các ứng dụng đòi hỏi can thiệp sâu vào hệ thống, yêu cầu thư viện tối thiểu và mang lại tốc độ tốt. Chúng sẽ vẫn được khách hàng tin dùng và nhận được sự hỗ trợ từ Microsoft trong vài năm tới. Tuy nhiên, sự ra đời của Windows 7 cũng đặt ra thách thức với các nhà phát triển phần mềm về một thế hệ ứng dụng kế tiếp - Những ứng dụng với giao diện tân tiến, tích hợp nhiều công nghệ hiển thị đồ họa, tận dụng sức mạnh của phần cứng, đáp ứng tốt các yêu cầu phổ biến hiện nay như đa phương tiện, hoạt hình và hơn nữa là độ tin cậy, dễ phát triển và bảo trì, tiện dụng khi triển khai. Công nghệ WPF mang lại cho các nhà phát triển thêm một công cụ hữu hiệu để đáp ứng xu hướng mới.

    Nguyễn Bá Quang
    Email: basquang@hotmail.com

    ID: A0912_118