Windows Presentation Foundation

**Windows Presentation Foundation** (viết tắt là WPF) do Microsoft phát triển, là công nghệ kế tiếp Windows Form dùng để xây dựng các ứng dụng dành cho máy trạm chạy hệ điều hành Windows. WPF được giới thiệu từ năm 2006 trong.NET Framework 3.0 (dưới tên gọi Avalon), công nghệ này nhận được sự quan tâm của cộng đồng lập trình viên bởi nhiều điểm đổi mới trong lập trình ứng dụng và khả năng xây dựng giao diện thân thiện, sinh động. Tại Việt Nam, WPF thực sự chưa phát triển so với nhánh khác là Silverlight (WPF/E).

WPF sử dụng 2 thư viện lõi là PresentationCore và PresentationFramework để xử lý các điều hướng, ràng buộc dữ liệu, sự kiện và quản lý giao diện. WPF dựa trên nền tảng đồ họa là DirectX, xử lý vector, hỗ trợ gam màu rộng, cho phép tùy biến giá trị opacity hay tạo gradient một cách dễ dàng, cho phép tạo ảnh không gian 2 chiều hoặc 3 chiều. Thư viện thực thi của WPF tự động tính toán và tận dụng tài nguyên của hệ thống một cách tối ưu để giảm tải cho CPU.

Ngoài ra, WPF hỗ trợ tốt hơn Winform trong việc xử lý hình ảnh, âm thanh, video, quản lý phông chữ, quản lý hiển thị và chỉnh sửa văn bản. Các control trong WPF có thể được lồng ghép linh động để tạo ra giao diện do được viết bằng XAML.
Một ứng dụng WPF có thể được xây dựng để chạy độc lập dưới dạng mở rộng EXE hoặc đóng gói với phần mở rộng là XBAP để có thể tích hợp lên website.

Thư viện thực thi WPF được tích hợp trong tất cả các hệ điều hành kể từ Windows Vista và Windows Server 2008.Microsoft.NET Framework 3.0 Release Notes

Cho đến thời điểm hiện tại, WPF có 5 phiên bản: WPF 3.0 (11-2006), WPF 3.5 (11-2007), WPF 3.5sp1 (8-2008), WPF 4 (4-2010), và WPF 4.5 (8-2012).

## Thành phần
### Direct3D
Đồ họa và giao diện dựa trên Direct3D cho phép hiển thị các xử lý điểm - ảnh phức tạp hơnGDI's. Công nghệ này cho phép chia sẻ tác vụ xử lý cho GPU và giảm tải CPU.

### Data Binding (Liên kết dữ liệu)
*Data binding* là điểm nổi bật của WPF trong việc liên kết dữ liệu của ứng dụng. Tùy theo mục đích của chương trình, lập trình viên có thể xử lý liên kết theo ba loại:
*# one time: Chỉ tải dữ liệu 1 lần khi ứng dụng được thực thi.
*# one way: Ứng dụng chỉ có nhiệm vụ hiển thị dữ liệu, mọi cập nhật từ phía người dùng sẽ không được lưu trữ.
*# two way: Dữ liệu có thể được lấy và cập nhật từ phía người dùng.
*# one way to source: Trái ngược với OneTime, dữ liệu sẽ chỉ được nhận từ Interface.

### Đa phương tiện
WPF cho phép xây dựng chương trình với sự hỗ trợ vector, xử lý hình ảnh, âm thanh, video, đồ họa 2D, 3D.
**Đồ họa 2D: brushes, pens, geometries, và transforms.
**Đồ họa 3D
**Hình ảnh: hỗ trợ các định dạng: BMP, JPEG, PNG, TIFF, Windows Media Photo, GIF và ICON.
**Video: hỗ trợ WMV, MPEG và AVI. Xử lý tốt hơn nếu Windows Media Player đã được cài và tích hợp codec.

### Templates
Dữ liệu trong WPF có thể được định nghĩa để hiển thị theo yêu cầu thông qua các thuộc tính (properties) và việc định nghĩa template, style cho các control.
*HierarchicalDataTemplate
*ItemsPanelTemplate
*ControlTemplate
*DataTemplate

### Hiệu ứng
WPF hỗ trợ hiệu ứng dựa trên thời gian thực thi của chương trình, thay vì frame-based. Các hiệu ứng đơn giản có thể xử lý bằng việc quản lý thời gian chạy, còn các xử lý phức tạp hơn cần đến sự hỗ trợ của lớp Animation.
*Tất cả các thuộc tính của đối tượng trong WPF đều có thể được xử lý để trở nên sinh động hơn, miễn là nó thuộc loại Dependency Property.
*Các lớp quản lý hiệu ứng tùy theo loại của thuộc tính được xử lý. Ví dụ, việc thay đổi màu sắc của control sẽ do lớp ColorAnimation hay thay đổi chiều dài hoặc chiều rộng do lớp DoubleAnimation đảm nhiệm.

Các hiệu ứng có thể được gom nhóm vào Storyboards và gán cho đối tượng và lớp này điều khiển việc bắt đầu hoặc dừng các hiệu ứng thông qua các phương thức tương ứng (Start, Stop, Pause...). Hiệu ứng cho ứng dụng có thể được viết trên giao diện bằng XAML hoặc định nghĩa bằng C#.

## Kiến trúc

## Công cụ phát triển
*Microsoft Visual Studio
*Microsoft Expression Blend
*Microsoft Expression Design
*XAMLPad
*XamlPadX v4
*SharpDevelop
*Sybase PowerBuilder.NET
*Snoop 
*WPF Inspector 
*WPF Graphics Tools
*ZAM 3D 
*3DPaintBrush 

## Triển khai
Hỗ trợ triển khai dưới dạng chạy độc lập trên máy trạm hoặc nhúng vào website.
** MSI, EXE
** XAML Browser Applications XBAP:.NET 3.0 chỉ hoạt động với Internet Explorer, WPF.NET 3.5 có thể chạy trên Mozzila Firefox thông qua plug-in, tuy nhiên đối với Windows 7 cần cài đặt lại.NET framework.

## Liên kết ngoài
*WindowsClient.NET  &ndash; Windows Presentation Foundation
*MSDN Library: Windows Presentation Foundation
*Rich typography with Windows Presentation Foundation
*Windows Presentation Foundation User Education &ndash; Active blog maintained by the WPF SDK team.
*Microsoft Expression Blend &ndash; Visual tool for creating Windows Presentation Foundation applications.
*WPF Tutorial - with a lot of samples and useful tips
*WPFdev - Information about WPF Design and Development 
*WPFSharp - Excellent posts about WPF for both developers and designers
*Windows Presentation Foundation Plugin