2013-09-23 193 views
13

我有一個用WinForms製作的小程序,現在我想用WPF重新制作一個程序。將Winform應用程序轉換爲WPF應用程序

我是WPF的新手,我看過無論你用XAML做什麼,你都可以沒有它,這意味着只使用代碼。

當然,您在使用Winforms時沒有任何XAML。我可以對用於winforms應用程序的WPF應用程序使用相同的代碼並獲得相同的結果嗎?或者我需要創建和編輯XAML?使用或不使用XAML的優點是什麼?另外,考慮到過去使用Winforms的經驗,我是否應該以某種方式改變我對WinForms的設計和實現的想法,但不適合WPF?

+2

爲什麼你想在WPF中重新創建它? –

+2

@SystemDown我對WPF非常陌生,因爲你從我的問題中意識到,我知道你可以使用WPF讓每件事看起來更好。幾乎沒有人仍然創建使用Winforms,如果它不是一些非常小的,非專業的東西,我想更多地瞭解WPF。 –

+1

因爲這將是學習經驗,我只是從頭開始重新創建東西。你會學到更多,並避免直接翻譯可以讓你陷入任何陷阱。 –

回答

23

不,您不能在WPF中重複使用winforms中的代碼。

即使你可以,你也不應該。

任何你可以用XAML做,你也可以不用它

你真的應該使用XAML來定義用戶界面,然後用DataBindingMVVM,這是一個更專業的方式發展比傳統的程序winforms方法。

不使用XAML比使用它更麻煩。它可能起初看起來很嚇人,但這是一件非常棒的事情。

使用的WinForms

不,當然不是當

當然,你沒有任何的XAML。 winforms是一個非常古老的技術,不支持任何東西。這就是爲什麼他們創建了Visual Studio設計師,否則沒有人會使用winforms做任何事情,因爲要做任何有用的事情都需要巨大的巨量代碼。

我可以使用相同的代碼爲WPF應用程序,我用於 winforms應用程序並獲得相同的結果?

也許,通過調整一些類名和什麼,但是然後你失去了WPF提供的主要優勢,它正是擺脫了可怕的WinForms類代碼。

考慮使用的WinForms以往的經驗,我應該以某種方式改變 我在想設計和實施 工作了的WinForms的方式,但並不適用於WPF?

是的。 WPF支持MVVM,這需要與傳統的Winforms方法完全不同的思路。

我強烈建議閱讀Rachel's Excellent Post關於從winforms升級到WPF。

+1

我都注意到你鏈接的文章有一些它自己關於你寫的所有內容的鏈接。你可能有一些鏈接到文章或什麼不是你自己的,你推薦? 我開始在http://www.wpftutorial.net/ 上閱讀教程你碰巧知道這是否是一個好的源代碼? –

+0

@YonatanNir首先,我會建議通過瑞秋的材料(上面鏈接)。 –

1

試圖在沒有XAML的情況下創建WPF控件會引起麻煩 - 整個框架是圍繞MVVM模式構建的,它要求以聲明方式而不是程序方式描述視圖。儘管您可以在C#和XAML中創建相同的UI對象,但在C#中這樣做需要您瞭解(以真正令人難以置信的細節)框架的運行方式,以便在用戶界面狀態發生變化時進行補償。另一方面,如果你這樣做了XAML(就像WPF規定你應該這樣做),那麼事情通常會更新得很好,而且沒有必要解決無盡的錯誤。簡而言之,「是」你可以用代碼來完成,但是「不」,你不能在代碼中完成而不會失去理智。

2

我試圖直接將Winforms應用程序轉換爲WPF,並且導致出現比您需要的更多問題,因爲您始終與框架對抗。閱讀MVVM和數據綁定並使用它。它是WPF設計的,並具有諸如可測試性等幾個優點。實際上,你可以用一些簡單的概念(數據綁定,視圖模型等等)獲得很長的路,並隨着你的發展擴展知識,但是我建議首先理解MVVM和WPF中的數據綁定。

一個很好的開始使用的框架是MVVMLight,但是它的價值在於沒有框架來編寫基礎知識來了解事情是如何工作的。

我似乎記得這是一個很好的一套從蘆葦科普塞帖子:http://reedcopsey.com/series/windows-forms-to-mvvm/

+0

我開始閱讀http://www.wpftutorial.net/ 上的教程你碰巧知道這是否是關於該主題的好資料? –

1

其實這取決於如何複雜的是你的項目。對於相當小的項目,您可以非常簡單地進行「轉換」。但即使WPF開發經常基於MVVM/Prism,它也不是一個好習慣,它們給你帶來很多好處。 此外,您的用戶界面的行爲可能會有所不同 - 這取決於您的項目的複雜性。

相關問題