Transisi dari Formulir Windows ke WPF

113

Untuk waktu yang lama sekarang, saya telah terjebak dengan pengembangan Windows Forms (dimulai dengan VB6, dan berlanjut hingga C # .NET 4.5), dan saya telah mencapai batas yang dapat dilakukan Windows Forms, keduanya menggunakan murni .NET , dan efek khusus dengan Kode Asli.

Saya telah mencoba mempelajari WPF dan XAML, tetapi saya terjebak di desainer baru WPF. Tampaknya sangat sulit untuk digunakan dibandingkan dengan desainer Windows Forms.

Saya ingin tahu apakah ada alternatif untuk desainer WPF .NET, yang lebih cocok untuk pengembang Windows Forms?

Matthew Layton
sumber
7
Saya biasanya bahkan tidak menggunakan desainer, kecuali untuk memeriksa apakah tata letak keseluruhan adalah apa yang saya harapkan; pada akhirnya saya menulis semuanya dengan tangan di XAML dan / atau menggunakan Blend bila diperlukan - meskipun saya bukan seorang desainer sehingga hampir tidak pernah terjadi.
Patryk Ćwiek
Anda dapat menggunakan campuran Ekspresi, tetapi saya rasa itu tidak lebih mudah, ini lebih untuk desainer daripada pengembang IMO. Saya biasanya hanya mematikan pratinjau dan bekerja dengan xml.
BlackICE
5
Ini tidak sulit untuk digunakan, Anda tidak terbiasa dengannya. Hambatan terbesar yang harus diatasi adalah perubahan paradigma antara kedua teknologi tersebut. Dapatkan buku bagus tentang XAML, setelah Anda terbiasa dengan XAML, Anda bahkan tidak akan menggunakan desainernya lagi - Anda akan mengetik XAML secara langsung.
slugster
3
@ Slugster, saya bertanya-tanya tentang itu. Hal yang sama terjadi dengan HTML ... Saya dulu membangun UI dengan dreamweaver, dan sekarang saya membuat kode HTML dengan tangan
Matthew Layton

Jawaban:

175

Saya suka menulis blog tentang artikel pemula untuk WPF, dan ada beberapa secara khusus yang dapat membantu Anda:

Untuk meringkas, perbedaan terbesar antara Winforms dan WPF adalah bahwa di WPF lapisan data Anda (the DataContext) adalah aplikasi Anda, sedangkan di Winforms lapisan UI Anda adalah aplikasi Anda.

Untuk melihatnya dengan cara lain, dengan WPF aplikasi Anda terdiri dari objek yang Anda buat, dan Anda menggunakan Template dan objek UI lainnya untuk memberi tahu WPF cara menggambar komponen aplikasi Anda.

Itu kebalikan dari WinForms di mana Anda membangun aplikasi Anda dari objek UI, dan kemudian memasoknya dengan data yang dibutuhkan.

Karena itu, desainer sebenarnya tidak banyak digunakan karena komponen aplikasi Anda dirancang dalam kode, dan desainer hanya perlu menggambar antarmuka yang ramah pengguna yang mencerminkan kelas data Anda (biasanya Modelsdan ViewModels)

Dan secara pribadi, saya lebih suka mengetik semua XAML saya dengan tangan karena lebih cepat dan tidak membuat kekacauan sebanyak yang dilakukan oleh desainer WPF drag / drop, meskipun saya menggunakan Designer pada kesempatan untuk melihat tampilan UI saya. Suka.

Jadi, untuk menjawab pertanyaan Anda tentang apakah ada desainer WPF lain yang cocok untuk pengembang WinForms, saya sarankan daripada mencari desainer lain, alih-alih mencari cara untuk mempelajari cara menggunakan WPF dengan cara yang dimaksudkan untuk digunakan. Menggunakan WPF seperti WinForms berarti Anda kehilangan banyak hal yang membuatnya begitu hebat :)

Rachel
sumber
14
Sangat setuju dengan @Rachel. Realisasi yang paling penting ketika membahas WPF adalah untuk memahami bahwa UI bukanlah Data dan bertindak sesuai dengan itu.
Federico Berasategui
2
@Rachel - hanya untuk bermain sebagai pendukung iblis: Memulai dengan UI (tombol mana, kotak teks, dll. Yang muncul di jendela) membantu memfokuskan aplikasi pada apa yang ingin Anda lakukan. Selebihnya hanyalah detail implementasi tentang bagaimana Anda ingin melakukannya.
Asaf
3
@HighCore lihat stackoverflow.com/questions/982978/mvvm-for-winforms dan Anda harus mengetahui bahwa Winforms hanyalah komponen Tampilan / UI di mana objek bisnis dapat Diikat ke kontrol pengguna. Oke: WPF lebih cocok untuk MVVM tetapi Winforms juga bisa bekerja dalam Pola Desain seperti itu. Dan seperti yang dikatakan Rachel, "Itu kebalikan dari WinForms di mana Anda membangun aplikasi Anda dari objek UI, lalu menyuplai mereka dengan data yang diperlukan." Itu sangat tidak benar untuk meskipun. Saya selalu berpikir setidaknya dengan Data dan Tampilan. Data dan Winforms / WPF / HTML apa saja.
Bernoulli IT
2
Itu mendukung penyatuan data setidaknya pada tingkat entri / modifikasi Data. Dan 99.9999999% pengembang itu juga akan mengacaukan WPF yang saya curigai. Tapi mari kita selesaikan diskusi ini. WPF benar-benar lebih kuat / cocok untuk MVVM dan pemisahan perhatian tetapi saya pikir Anda dan Rachel mendorong Winforms ke sudut negatif. Terutama ketika Anda terus menggunakan kata-kata yang Anda gunakan ...
Bernoulli IT
3
@YoupTube Anda benar, Winforms mendukung pengikatan data, dan dimungkinkan untuk membuat pengikatan khusus Anda sendiri untuk kasus-kasus di mana sistem pengikatan default tidak akan berfungsi juga. Saya menulis jawaban ini dan artikel blog saya dengan pemikiran pemula, dan biasanya pemula berpikir dalam hal komponen UI, bukan objek data. Selain itu, pengikatan di WinForms tidak selalu ada dalam keadaan seperti sekarang, begitu banyak pengembang yang tumbuh dengan WinForms, atau yang terbiasa dengan teknologi lain yang tidak menggunakan pengikatan, akan sering tidak mengidentifikasi perbedaan utama ini saat beralih. ke arsitektur terikat. :)
Rachel
9

Meskipun, beberapa orang tidak setuju, saya juga akan merekomendasikan untuk tidak menggunakan desainer VS. Setidaknya untuk tidak membuat antarmuka. Jika Anda mungkin ingin mendapatkan kesan pertama dari implementasi Anda tanpa memulai aplikasi, itu adalah penampil yang baik setidaknya selama tidak ada hal-hal canggih yang disukai Stylesdan Templatesdigunakan. Namun menurut IMHO, hasil drag and drop -nya hanya boleh digunakan sebagai prototipe saja dan oleh karena itu dibuang setelah tidak diperlukan lagi.

Berikut beberapa alasan yang penting bagi saya untuk tidak menggunakannya.

  1. Perancang VS bekerja dengan margin tetap dan perataan (yang biasanya tidak diperlukan, jika Anda menggunakan kontrol tata letak), berarti Anda harus menyentuh banyak kontrol, jika persyaratan diubah. Jika Anda mendalami XAML dan mekanika WPF, Anda dapat membuat aplikasi yang dapat dimodifikasi dengan sedikit usaha, terkait tampilan dan nuansanya.

  2. Karena perancang membuat xaml, komposisinya tidak optimal dan UI dapat berkinerja buruk. Saya tidak mengukurnya, itu hanya perasaan.

Alternatif yang jauh lebih baik adalah MS Blend , meskipun memulainya adalah segalanya tetapi mudah. Hasil drag and dropnya jauh lebih baik dari hasil desainer VS.
Tetapi ini adalah alat yang cukup kuat, yang membantu Anda menggunakan elemen yang cukup kuat untuk membuat UI yang canggih. Saya merekomendasikan untuk mengunjungi setidaknya lokakarya singkat untuk mendapatkan gambaran tentang peluangnya.

Kembali ke pertanyaan Anda, IMHO, dan saya pikir banyak orang setuju, dapatkan sendiri buku yang bagus misalnya WPF Unleashed dan nanti, jika Anda ingin tahu lebih banyak tentang detailnya, WPF Pro . Ada banyak fitur yang berbeda Winforms. Anda tidak akan mengenal mereka dengan menggunakan desainer mana pun. Saya pikir itu pendekatan terbaik.

Harap pertimbangkan juga bahwa ada banyak kerangka kerja dan pustaka (misalnya lampu MVVM , WPFToolkit ) di luar sana, yang sudah memecahkan beberapa masalah umum. Jadi tidak perlu menemukan kembali roda.

DHN
sumber
9

Saya tahu ini adalah pertanyaan lama tetapi untuk kepentingan orang lain yang melihat ini, saya pikir saya harus memperbaiki keseimbangan sedikit - membaca beberapa jawaban lain, saya merasa bahwa beberapa 'tidak menggunakan desainer 'sentimen berasal dari tidak menggunakannya dengan benar. Tutorial ini cukup bagus untuk membantu Anda dan menjawab beberapa kritik di posting lain.

Misalnya, Anda dapat beralih dari tata letak berbasis margin seperti Winforms yang merupakan default saat Anda melepaskan kontrol, ke gaya WPF yang lebih dengan mengklik kanan dan memilih 'Atur Ulang Tata Letak'

Video ini membahas dasar yang serupa.

Saya masih lebih suka perancang VS2010 yang seimbang - VS2013 tampaknya agak bermasalah saat menyeret dan menjatuhkan ke TabItems **, (yang banyak digunakan proyek saya saat ini) - tetapi tampilan Garis Besar Dokumen VS2013 memungkinkan Anda memindahkan berbagai hal dalam tampilan itu juga , yang bisa menjadi nilai tambah yang nyata.

Sungguh, untuk mendapatkan hasil maksimal dari WPF dan xaml Anda harus cukup fasih baik dalam tampilan desainer maupun tampilan xaml dan beralih di antara keduanya; jika Anda menghindar dari desainer, Anda kehilangan sesuatu yang dapat sangat membantu Anda.

** Edit - meskipun ini tampaknya telah diperbaiki di Pembaruan 3 untuk VS 2013, dan dalam pratinjau VS14, sampai saat ini saya masih mendapatkan perilaku aneh di kali.

peterG
sumber
7

Pertama-tama, di WPF (XAML) di Visual Studio deisgner, Anda harus selalu menggunakan kode xaml untuk membangun UI Anda dan jangan seret dan lepas kendali Anda! Anda harus menjaga kode Anda tetap bersih. Anda dapat menggunakan Expression Blend untuk membantu Anda, ini lebih berorientasi grafis dengan drag and drop, tetapi tidak gratis.

Ini bukan kurva belajar yang besar, tapi saya pikir Anda harus belajar bagaimana mengerjakan xaml Anda dengan tangan daripada mencari alternatif.

mlemay
sumber
1
Drag-n-drop tidak ada salahnya, meskipun jika Anda lebih suka mengetik, itu juga bagus. Mengetik secara manual tidak pernah menjadi kunci untuk WPF.
David
3
Ketika Anda menyeret dan melepaskan WPF, saya melihat bahwa sering kali, Anda memiliki banyak margin -1200 dan hal-hal seperti itu tidak masuk akal sama sekali ... Saya selalu melakukannya dengan tangan. Lebih baik pasti
mlemay
1
Ini di luar topik. Pastikan masalah Anda lumrah bagi semua orang, bukan hanya diri Anda sendiri. Selain itu, Anda tidak dapat mengatakan drag-n-drop itu buruk, jika Anda mengalami masalah. Mengandalkan desainer masih dibutuhkan dan terkadang disukai, Anda mungkin melihat ini benar, jika Anda tahu bagaimana ekspresi disambut baik oleh desainer dan pengembang.
David
1
ya jika Anda menggunakan perpaduan ekspresi, ok Anda bisa melakukannya, tetapi saya berbicara di studio visual ...
mlemay
12
Saya pikir menasihati seseorang yang berasal dari Formulir dan memulai WPF untuk tidak menggunakan desainer adalah ide yang sangat buruk. Cara tercepat untuk memahami XAML adalah dengan menggunakan drag and drop lalu mengamati kodenya.
Ucodia
7

Saya telah melalui proses ini seperti Anda. Setelah itu saya mengajar semua orang di perusahaan saya WPF. Ada beberapa pelajaran penting yang telah saya pelajari dan semua orang yang saya kenal bekerja dengan WPF.

  1. Jika Anda bekerja dengan kontrol UI di kode di belakang, .... Maka Anda salah melakukannya. Anda sama sekali tidak perlu berurusan dengan kontrol UI di kode di belakang.
  2. Anda tidak memerlukan pengembang visual untuk mengkliknya. Anda jauh lebih produktif hanya dengan berurusan dengan XAML. Gunakan Salin / Tempel. Jangan percaya pada kemampuan mengetik Anda. Ini akan menghemat banyak sakit kepala.
  3. Pikirkan XAML seperti jendela yang terletak di atas data. Di kode di belakang Anda sedang mengubah data. Di XAML Anda mendefinisikan bagaimana UI akan menafsirkan data.
  4. Pengonversi luar biasa. Segera setelah Anda mendapatkan jumlah kunci Pengonversi, produktivitas Anda akan meroket tinggi. Mereka akan mengambil alih peran kontrol eventhandler yang menyembunyikan atau mengubah ukuran, atau apa pun tentang UI,

Itu membuat pengembangan UI menyenangkan. Terutama setelah Anda mengetahui bagaimana ia suka bermain bersama dengan proses Asyc. Ini benar-benar menghilangkan banyak sakit kepala yang disebabkan oleh Winforms.

pengguna853710
sumber