Windows Forms'tan WPF'ye Geçiş


113

Uzun bir süredir Windows Forms geliştirmeye takılı kaldım (VB6 ile başladı ve C # .NET 4.5'e kadar devam etti) ve her ikisi de saf .NET kullanarak Windows Forms'un yapabileceklerinin sınırına neredeyse ulaştım. ve Yerel Kod ile özel efektler.

WPF ve XAML öğrenmeye çalıştım, ancak WPF'nin yeni tasarımcısında sıkışıp kaldım. Windows Forms tasarımcısına kıyasla kullanımı gerçekten çok zor görünüyor.

.NET'in WPF tasarımcısına, Windows Forms geliştiricilerine daha uygun alternatifler olup olmadığını bilmek istiyorum.


7
Genelde tasarımcıyı bile kullanmıyorum, genel düzenin beklediğim gibi olup olmadığını kontrol etmek dışında; sonunda XAML'de her şeyi elle yazıyorum ve / veya gerektiğinde Blend kullanıyorum - tasarımcı olmadığım için neredeyse hiç gerçekleşmiyor.
Patryk Ćwiek

İfade karışımını kullanabilirsiniz, ancak bunun gerçekten daha kolay olduğunu sanmıyorum, tasarımcılar için geliştiricilerin IMO'sundan daha fazlası. Normalde önizlemeyi kapatırım ve xml ile çalışırım.
BlackICE

5
Kullanması zor değil, alışkın değilsin. Üstesinden gelinmesi gereken en büyük engel, iki teknoloji arasındaki paradigma değişikliğidir. XAML'de kendinize iyi bir kitap alın, XAML'e alıştığınızda artık tasarımcıyı bile kullanmayacaksınız - doğrudan XAML yazacaksınız.
slugster

3
@slugster, bunu merak ettim. HTML'de de aynı şey oldu ... UI'yi dreamweaver ile oluşturuyordum ve şimdi HTML'yi elle
kodluyorum

Yanıtlar:


175

WPF için başlangıç ​​makaleleri hakkında blog yazmayı seviyorum ve özellikle size yardımcı olabilecek birkaç tane var:

Özetlemek gerekirse, Winforms ve WPF arasındaki en büyük fark, WPF'de veri katmanınızın (the DataContext) sizin uygulamanız, Winforms'ta UI katmanınızın uygulamanız olmasıdır.

Başka bir açıdan bakarsak, WPF ile uygulamanız oluşturduğunuz nesnelerden oluşur ve WPF'ye uygulama bileşenlerinizi nasıl çizeceğini söylemek için Şablonları ve diğer UI nesnelerini kullanırsınız.

Bu, uygulamanızı UI nesnelerinden oluşturduğunuz ve ardından onlara gereken verileri sağladığınız WinForms'un tam tersidir.

Bu nedenle, uygulama bileşenleriniz kodda tasarlandığından ve tasarımcının yalnızca veri sınıflarınızı yansıtan kullanıcı dostu bir arabirim çizmesi gerektiğinden tasarımcı aslında pek kullanılmaz (genellikle Modelsve ViewModels)

Ve kişisel olarak, tüm XAML'imi elle yazmayı tercih ederim çünkü daha hızlıdır ve WPF tasarımcısının yaptığı kadar karışıklık yaratmaz, ancak zaman zaman Tasarımcıyı kullanıcı arayüzümün nasıl görüneceğini önizlemek için kullanıyorum. sevmek.

WinForms geliştiricileri için uygun başka WPF tasarımcıları olup olmadığı hakkındaki sorunuza cevabınız için, başka bir tasarımcı aramak yerine WPF'yi kullanılması gerektiği şekilde nasıl kullanacağınızı öğrenmeye çalışmanızı öneririm. WPF'yi WinForms gibi kullanmak, onu bu kadar harika yapan şeylerin çoğunu kaçırdığınız anlamına gelir :)


14
@ Rachel ile tamamen katılıyorum. WPF'nin ışığına çıkarken en önemli fark, UI'nin Veri olmadığını anlamak ve buna göre hareket etmektir.
Federico Berasategui

2
@Rachel - sadece şeytanın avukatını oynamak için: UI ile başlamak (pencerede hangi düğmeler, metin kutuları vb. Görünür), uygulamanın yapmak istediğiniz şeye odaklanmasına yardımcı olur . Gerisi sadece bunu nasıl yapmak istediğinize dair uygulama detaylarıdır .
Asaf

3
@HighCore, stackoverflow.com/questions/982978/mvvm-for-winforms adresine bir göz atın ve Winforms'un, iş nesnelerinin kullanıcı kontrollerine Bağlı olabileceği bir Görünüm / UI bileşeni olduğunu kabul etmeniz gerekir. Tamam: WPF, MVVM için daha uygundur, ancak yine de Winforms böyle bir Tasarım Modelinde de çalışabilir. Ve Rachel'ın belirttiği gibi, "Bu, uygulamanızı UI nesnelerinden oluşturduğunuz ve ardından onlara gereken verileri sağladığınız WinForms'un tam tersidir." Yine de çok doğru değil. Her zaman en azından Data ve View şeklinde düşünüyorum. Veri ve Winforms / WPF / HTML ne olursa olsun.
Bernoulli BT

2
En azından Veri girişi / değiştirme seviyesinde veri bağlamayı destekler. Ve geliştiricilerin% 99,9999999'u da şüphelendiğim WPF'yi karıştıracak. Ama bu tartışmayı bitirelim. WPF, MVVM için kesinlikle daha güçlü / uygun ve endişelerin ayrılması ama bence siz ve Rachel Winforms'u olumsuz bir köşeye itiyor. Özellikle de kullandığınız kelimeleri kullanmaya devam ettiğinizde ...
Bernoulli BT

3
@YoupTube Haklısınız, Winforms veri bağlamayı destekliyor ve varsayılan bağlama sisteminin de çalışmayacağı durumlar için kendi özel bağlamalarınızı oluşturmanız mümkündür. Bu cevabı ve blog makalelerimi yeni başlayanları düşünerek yazdım ve yeni başlayanlar genellikle veri nesneleri değil, UI bileşenleri açısından düşünüyorlar. Ek olarak, WinForms'da bağlama her zaman şu an olduğu durumda mevcut değildi, WinForms ile büyüyen veya bağlama kullanmayan diğer teknolojilere alışkın olan pek çok geliştirici, genellikle geçiş yaparken bu temel farkı belirleyemeyecektir. bağlı bir mimariye. :)
Rachel

9

Bazı insanlar aynı fikirde olmasa da, VS tasarımcısını kullanmamayı da tavsiye ederim. En azından bir arayüz oluşturmamak. Uygulamayı başlatmadan uygulamasının bir ilk izlenim almak isteyebilirsiniz, bu gibi uzun hiçbir sofistike şeyler olarak en az iyi bir izleyici olduğunu Stylesve Templateskullanılmaktadır. Ancak, IMHO, sürükle ve bırak sonucu yalnızca prototip olarak kullanılmalı ve bu nedenle artık ihtiyaç kalmadığında atılmalıdır.

İşte kullanmamam için önemli olan bazı nedenler.

  1. VS tasarımcısı, düzeltme kenar boşlukları ve hizalamalarla çalışıyor (bu, düzen kontrollerini kullanıyorsanız, genellikle gerekli değildir), gereksinimler değiştirilirse birçok kontrole dokunmanız gerektiği anlamına gelir. XAML ve WPF mekaniğinin derinliklerindeyseniz, görünüm ve his açısından küçük bir çabayla değiştirilebilen uygulamalar oluşturabilirsiniz.

  2. Tasarımcı xaml'i oluşturduğundan, kompozisyon optimal değildir ve UI kötü performans gösterebilir. Ölçmedim, bu sadece bir his.

Çok daha iyi bir alternatif MS Blend'tir , ancak başlangıç ​​her şeyden daha kolaydır. Onun sürükle ve bırak sonucu çok daha iyi olduğunu VS tasarımcısı sonucudur.
Ancak, son teknoloji ürünü bir kullanıcı arayüzü oluşturmak için oldukça güçlü öğeler kullanmanıza yardımcı olan oldukça güçlü bir araçtır. Fırsatları hakkında fikir edinmek için en azından kısa bir atölyeyi ziyaret etmenizi öneririm.

Sorunuza geri dönelim, IMHO ve sanırım birçok insan kendinize iyi bir kitap alın, örneğin WPF Unleashed ve daha sonra, ayrıntılar hakkında daha fazla bilgi edinmek istiyorsanız, WPF Pro . Farklı olan birçok özellik var Winforms. Herhangi bir tasarımcı kullanarak onları tanımayacaksınız. Bence en iyi yaklaşım bu.

Ayrıca , halihazırda bazı genel sorunları çözmekte olan birçok çerçeve ve kitaplığın (örn. MVVM light , WPFToolkit ) bulunduğunu da dikkate alın. Yani tekerleği yeniden icat etmeye gerek yok.


9

Bunun eski bir soru olduğunu biliyorum ama buna bakan başka birinin yararı için, dengeyi biraz düzeltmem gerektiğini düşünüyorum - diğer cevapların bazılarını okurken, bazılarının 'tasarımcıyı kullanma' hissine kapılıyorum. 'duygu, onu doğru kullanmamaktan gelir. Bu eğitim , sizi ilerletmek ve diğer gönderilerdeki bazı eleştirilere cevap vermek için oldukça iyidir.

Örneğin, bir denetimi bıraktığınızda varsayılan olan Winforms benzeri kenar boşluğu tabanlı düzenden, sağ tıklayıp 'Düzeni Sıfırla'yı seçerek daha WPF'ye benzer bir düzene geçebilirsiniz.

Bu video benzer bir zemini işliyor.

Ben hala VS2010 tasarımcısını dengede tercih ediyorum - VS2013, TabItems ** üzerine sürükleyip bırakırken biraz hatalı görünüyor, (mevcut projem çok kullanıyor) - ancak VS2013 Document Outline görünümü, nesneleri bu görünümde de hareket ettirmenize izin veriyor , bu gerçek bir artı olabilir.

Gerçekten de, WPF ve xaml'den en iyi şekilde yararlanmak için hem tasarımcı hem de xaml görünümünde ve aralarında geçiş yaparken makul derecede akıcı olmanız gerekir; Tasarımcıdan uzak durursanız, size çok yardımcı olabilecek bir şeyi kaçırırsınız.

** Düzenleme - Bu, VS 2013 için Güncelleme 3'te ve VS14'ün önizlemelerinde geliştirilmiş gibi görünse de, bugüne kadar hala garip davranışlar alıyorum.


7

Her şeyden önce, Visual Studio deisgner'daki WPF (XAML) 'de, kullanıcı arayüzünüzü oluşturmak için her zaman xaml kodunu kullanmalısınız ve kontrolünüzü sürükleyip bırakmayın! Kodunuzu temiz tutmanız gerekir. Size yardımcı olması için Expression Blend'i kullanabilirsiniz, sürükle ve bırak ile daha grafik odaklı, ancak ücretsiz değil.

Bu büyük bir öğrenme eğrisi değil, ama xaml'inizi alternatif aramak yerine elle nasıl yapacağınızı öğrenmeniz gerektiğini düşünüyorum.


1
Sürükleyip bırakmanın bir zararı yoktur, ancak yazmayı tercih ederseniz, bu da sorun değildir. El ile yazmak asla WPF'nin anahtarı değildir.
David

3
WPF'de sürükleyip bıraktığınızda, sık sık, çok fazla -1200 marjınız olduğunu ve bunun gibi şeyler hiç mantıklı gelmediğini görüyorum ... Bunu her zaman elle yaptım, kesinlikle daha iyi
mlemay

1
Bu konu dışı. Sorununuzun sadece kendiniz için değil, herkes için sıradan olduğundan emin olun. Ayrıca bazı sorunlarınız varsa sürükle-bırak işleminin kötü olduğunu söyleyemezsiniz. Tasarımcıya güvenmek hala gereklidir ve bazen tercih edilir, eğer ifadenin hem tasarımcı hem de geliştiriciler tarafından nasıl memnuniyetle karşılandığını biliyorsanız, bunun doğru olduğunu görebilirsiniz.
David

1
evet, eğer ifade harmanı kullanırsan, tamam yapabilirsin, ama ben görsel stüdyoda konuşuyordum ...
mlemay

12
Formlar'dan gelen birine tasarımcıyı kullanmamasını önermek ve WPF'yi başlatmak gerçekten kötü bir fikir. XAML'yi anlamanın en hızlı yolu, sürükle ve bırak özelliğini kullanmak ve ardından kodu gözlemlemektir.
Ucodia

7

Ben de senin gibi bu süreci yaşadım. Daha sonra şirketimdeki WPF'deki herkese öğretiyordum. WPF ile kimlerin çalıştığını öğrendiğim ve tanıdığım herkes için birkaç önemli ders var.

  1. Arkasındaki kodda UI kontrolleri ile çalışıyorsanız, .... O halde yanlış yapıyorsunuz demektir. Arkadaki koddaki UI kontrolleriyle uğraşmanıza kesinlikle gerek yoktur.
  2. Üzerine tıklamak için görsel geliştiriciye ihtiyacınız yok. Yalnızca XAML ile uğraşarak çok daha üretken olursunuz. Kopyala / Yapıştır'ı kullanın. Yazma yeteneklerinize güvenmeyin. Çok fazla baş ağrısını kurtaracak.
  3. XAML'i verilere bakan bir pencere olarak düşünün. Arkanızdaki kodda verileri değiştiriyorsunuz. XAML'de kullanıcı arayüzünün verileri nasıl yorumlayacağını tanımlıyorsunuz.
  4. Dönüştürücüler harika. Önemli miktarda Dönüştürücü alır almaz, verimliliğiniz Gökyüzü yükselir. Gizleyen ya da yeniden boyutlandıran çılgın miktarda kontrol kontrolünün rolünü üstlenecekler ya da kullanıcı arayüzü hakkında ne olursa olsun,

UI geliştirmeyi eğlenceli hale getirir. Özellikle de Asyc süreçleriyle birlikte oynamanın nasıl bir şey olduğunu öğrendikten sonra. Winforms'un neden olduğu birçok baş ağrısını gerçekten ortadan kaldırır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.