This article is currently in the process of being translated into Vietnamese (~99% done).
WPF vs. WinForms
Trong chương trước, chúng ta đã nói về WPF là gì và một chút về WinForms. Trong chương này, tôi sẽ cố gắng so sánh hai framework, bởi vì trong khi chúng phục vụ cùng một mục đích, có rất nhiều sự khác biệt giữa chúng. Nếu bạn chưa bao giờ làm việc với WinForms trước đây, và đặc biệt nếu WPF là GUI framework đầu tiên của bạn, bạn có thể bỏ qua chương này, nhưng nếu bạn quan tâm đến sự khác biệt thì hãy đọc tiếp.
Sự khác biệt quan trọng nhất giữa WinForms và WPF là trong khi WinForms đơn giản là một lớp dựa trên chuẩn Windows controls (ví dụ TextBox), nhưng WPF được xây dựng từ đầu và không dựa vào các chuẩn Windows controls trong hầu hết mọi tình huống . Điều này có vẻ giống như một sự khác biệt tinh tế, nhưng nó thực sự không phải, mà bạn chắc chắn sẽ nhận thấy nếu bạn đã từng làm việc với một framework phụ thuộc vào Win32 / WinAPI.
Một ví dụ tuyệt vời của điều này là một button có hình ảnh và văn bản trên đó. Đây không phải là một chuẩn Windows control, vì vậy WinForms không cung cấp cho bạn khả năng này. Thay vào đó, bạn sẽ phải tự vẽ hình ảnh, triển khai button của bạn mà có hỗ trợ hình ảnh hoặc sử dụng control của bên thứ 3. Với WPF, một button có thể chứa bất cứ thứ gì vì nó chủ yếu là một đường viền với nội dung và các trạng thái khác nhau (ví dụ: untouched (không được chạm), hovered (giữ), pressed (nhấn)). WPF button "trông đơn giản hơn" WinForm control, giống như hầu hết các WPF control khác, có nghĩa là nó có thể chứa một loạt các control khác bên trong nó. Bạn muốn một button có hình ảnh và một số văn bản? Chỉ cần đặt một hình ảnh và một TextBlock control bên trong button và bạn đã hoàn tất! Đơn giản đơn bạn sẽ không có được sự linh hoạt này ngoài các chuẩn WinForms control, đó là lý do tại sao có một thị trường lớn để thực hiện các control đơn giản như các button có hình ảnh và vân vân.
Nhược điểm của tính linh hoạt này là đôi khi bạn sẽ phải làm việc chăm chỉ hơn để đạt được thứ gì đó rất dễ dàng với WinForms, bởi vì nó được tạo ra chỉ cho khi bạn cần nó. Ít nhất đó là cách bạn cảm thấy ngay từ đầu, nơi bạn thấy mình tạo ra các template để tạo một ListView với một hình ảnh và một số văn bản được sắp xếp độc đáo, thứ mà WinForms ListViewItem thực hiện trong một dòng code.
Đây chỉ là một sự khác biệt, nhưng khi bạn làm việc với WPF, bạn sẽ nhận ra rằng đó là lý do cơ bản cho nhiều sự khác biệt khác - WPF chỉ đơn giản là làm mọi thứ theo cách riêng của nó, để tốt hơn và tồi tệ hơn. Bạn không còn bị ràng buộc để làm những việc theo cách của Windows, nhưng để có được sự linh hoạt như thế này, bạn phải trả thêm một chút công sức khi bạn thực sự chỉ muốn làm mọi thứ theo cách của Windows.
Sau đây là danh sách hoàn toàn chủ quan về những lợi thế chính của WPF và WinForms. Nó sẽ cung cấp cho bạn một ý tưởng tốt hơn về những gì bạn đang làm.
Ưu điểm của WPF
- Nó mới hơn và do đó phù hợp hơn với các tiêu chuẩn hiện tại
- Microsoft đang sử dụng nó cho rất nhiều ứng dụng mới, ví dụ: Visual Studio
- Nó linh hoạt hơn, vì vậy bạn có thể làm nhiều việc hơn mà không phải viết hoặc mua các control mới
- Khi bạn cần sử dụng các control của bên thứ 3, các nhà phát triển các control này có thể sẽ tập trung hơn vào WPF vì nó mới hơn
- XAML giúp dễ dàng tạo và chỉnh sửa GUI của bạn và cho phép công việc được phân chia giữa một nhà thiết kế (XAML) và một lập trình viên (C #, VB.NET, v.v.)
- Databinding, cho phép bạn có được một sự tách biệt hơn giữa data và layout
- Sử dụng tăng tốc phần cứng để vẽ GUI, để có hiệu suất tốt hơn
- Nó cho phép bạn tạo giao diện người dùng cho cả ứng dụng Windows và các ứng dụng web (Silverlight / XBAP)
Ưu điểm của WinForms
- Nó cũ hơn và do đó được thử nghiệm và kiểm tra nhiều hơn
- Đã có rất nhiều control của bên thứ ba mà bạn có thể mua hoặc nhận miễn phí
- Các nhà thiết kế trong Visual Studio vẫn còn, bằng văn bản, tốt hơn cho WinForms hơn cho WPF, nơi bạn sẽ phải làm nhiều công việc của mình cho mình với WPF
- Afar
- Afrikaans
- Albanian
- Arabic
- Bulgarian
- Catalan
- Chinese
- Croatian
- Czech
- Danish
- Dutch
- Finnish
- French
- German
- Gujarati
- Hebrew
- Hindi
- Hungarian
- Indonesian
- Italian
- Japanese
- Kannada
- Korean
- Lithuanian
- Macedonian
- Norwegian Bokmål
- Persian
- Polish
- Portuguese
- Romanian
- Russian
- Serbian
- Slovak
- Slovenian
- Spanish
- Swedish
- Tamil
- Thai
- Turkish
- Ukrainian
- Uzbek
- Vietnamese