2013-09-23 38 views
13

Tôi có một chương trình nhỏ mà tôi đã thực hiện với WinForms và bây giờ tôi muốn làm lại nó bằng cách sử dụng WPF.Chuyển đổi một ứng dụng Winform sang ứng dụng WPF

Tôi mới tham gia WPF và tôi đọc rằng bất cứ điều gì bạn có thể làm với XAML, bạn cũng có thể làm mà không có nó, có nghĩa là chỉ sử dụng mã.

Tất nhiên bạn không có bất kỳ XAML nào khi sử dụng Winforms. Tôi có thể sử dụng cùng một mã cho ứng dụng WPF mà tôi đã sử dụng cho ứng dụng winforms và nhận được kết quả tương tự không? Hay tôi cần tạo và chỉnh sửa XAML? Những lợi thế của việc sử dụng hoặc không sử dụng XAML là gì?

Ngoài ra, xem xét kinh nghiệm trong quá khứ bằng cách sử dụng Winforms, tôi có nên thay đổi cách tôi đang suy nghĩ về thiết kế và triển khai làm việc cho Winforms nhưng không thích hợp cho WPF?

+2

Tại sao bạn muốn tạo lại nó trong WPF? –

+2

@ Systemystem Tôi khá mới đối với WPF khi bạn nhận ra câu hỏi của mình và tôi biết bạn có thể làm mọi thứ trông đẹp hơn bằng cách sử dụng WPF. Hầu như không ai vẫn tạo ra bằng cách sử dụng Winforms nếu nó không phải cho một số công cụ rất nhỏ, không chuyên nghiệp và tôi muốn nghiên cứu thêm một chút về WPF. –

+1

Vì đây sẽ là trải nghiệm học tập tôi sẽ chỉ tạo lại nội dung từ đầu. Bạn sẽ tìm hiểu thêm và tránh bất cứ điều gì cạm bẫy dịch trực tiếp có thể đưa bạn vào. –

Trả lời

23

Không, bạn không thể sử dụng lại mã từ winforms trong WPF.

và thậm chí nếu bạn có thể, bạn không nên.

bất cứ điều gì bạn có thể làm với XAML, bạn cũng có thể làm mà không có nó

Bạn thực sự nên sử dụng XAML để xác định giao diện người dùng, và sau đó sử dụng DataBindingMVVM, mà là một cách nhiều chuyên nghiệp hơn của phát triển hơn phương pháp tiếp cận thủ tục truyền thống.

Không sử dụng XAML gây rắc rối hơn nhiều so với sử dụng nó. Nó có thể trông đáng sợ lúc đầu nhưng nó là một điều thực sự tuyệt vời để làm việc với.

Tất nhiên là bạn không có bất kỳ XAML khi sử dụng Winforms

Không, tất nhiên là không. winforms là một công nghệ thực sự cũ mà không hỗ trợ bất cứ điều gì. Đó là lý do tại sao họ tạo ra các nhà thiết kế Visual Studio, nếu không sẽ không ai có thể sử dụng winforms cho bất cứ điều gì, vì số lượng khổng lồ khổng lồ mã cần thiết để làm bất cứ điều gì hữu ích.

Tôi có thể sử dụng cùng một mã cho ứng dụng WPF mà tôi đã sử dụng cho ứng dụng win2s và nhận kết quả tương tự không?

Có thể, bằng cách điều chỉnh một số tên lớp và điều gì đó, nhưng sau đó bạn mất lợi thế chính do WPF cung cấp, chính xác là loại bỏ mã dạng winforms khủng khiếp.

xem xét các kinh nghiệm quá khứ sử dụng WinForms, nên tôi bằng cách nào đó thay đổi cách tôi đang suy nghĩ về thiết kế và thực hiện mà làm việc cho Winforms nhưng không phải là thích hợp cho WPF?

Có. WPF hỗ trợ MVVM, và điều đó đòi hỏi một tâm lý thực sự khác với phương pháp winforms truyền thống.

Tôi khuyên bạn nên đọc Rachel's Excellent Post về việc nâng cấp từ winforms lên WPF.

+1

Tôi nhận thấy bài đăng bạn đã liên kết có một số liên kết của riêng nó về mọi thứ bạn đã viết. Bạn có thể có một số liên kết đến các bài viết hoặc những gì không phải của riêng bạn mà bạn đề nghị? Tôi bắt đầu đọc hướng dẫn tại http://www.wpftutorial.net/ Bạn có biết rằng đó là một nguồn tốt không? –

+0

@YonatanNir đầu tiên của tất cả, tôi sẽ khuyên bạn nên đi qua tài liệu của Rachel (liên kết ở trên). –

1

Cố gắng tạo điều khiển WPF mà không XAML đang yêu cầu sự cố - toàn bộ khuôn khổ được xây dựng xung quanh mẫu MVVM yêu cầu Chế độ xem của bạn được mô tả theo kiểu khai báo chứ không phải là thời trang thủ tục. Mặc dù bạn chắc chắn có thể tạo cùng một đối tượng giao diện người dùng trong C# và XAML, làm như vậy trong C# sẽ yêu cầu bạn biết (chi tiết thực sự đáng kinh ngạc) cách khung hoạt động để bù lại khi trạng thái giao diện người dùng của bạn thay đổi. Mặt khác, nếu bạn làm điều đó XAML (như WPF dictates bạn có nghĩa vụ phải), sau đó mọi thứ thường cập nhật tốt và không cần thiết phải làm việc xung quanh lỗi bất tận. Trong ngắn hạn "có" bạn có thể làm điều đó trong mã, nhưng "không" bạn không thể làm điều đó trong mã mà không làm mất sự tỉnh táo của bạn.

2

Tôi đã thử chuyển đổi ứng dụng Winforms thành WPF một cách trực tiếp và nó gây ra nhiều vấn đề hơn bạn cần vì bạn luôn luôn chống lại khung công tác. Đọc trên MVVM và databinding và sử dụng đó. WPF của nó được thiết kế xung quanh, và đi kèm với một số lợi thế như testability. Bạn có thể thực sự có được một chặng đường dài với một vài khái niệm đơn giản (databinding, viewmodels etc ...) và mở rộng kiến ​​thức của bạn khi bạn đi, nhưng tôi muốn giới thiệu một sự hiểu biết về MVVM và databinding trong WPF đầu tiên.

Một khuôn khổ tốt để bắt đầu với sẽ là MVVMLight, nhưng giá trị của nó là viết những điều cơ bản mà không cần một khuôn khổ để tìm hiểu cách mọi thứ hoạt động đầu tiên.

tôi dường như nhớ này là một tập tốt của các bài viết từ sậy copsey: http://reedcopsey.com/series/windows-forms-to-mvvm/

+0

Tôi bắt đầu đọc hướng dẫn tại http://www.wpftutorial.net/ Bạn có biết rằng đó là một nguồn tốt về chủ đề này không? –

1

Trên thực tế nó phụ thuộc vào độ phức tạp là dự án của bạn. Đối với một dự án khá nhỏ, bạn có thể làm cho "chuyển đổi" này khá đơn giản. Nhưng nó không phải là một thực hành tốt ngay cả bởi vì WPF phát triển thường dựa trên MVVM/Prism và họ cung cấp cho bạn rất nhiều lợi thế. Ngoài ra, hành vi của giao diện người dùng của bạn có thể khác nhau - nó phụ thuộc vào sự phức tạp của dự án của bạn.

Các vấn đề liên quan