Przejście z Windows Forms do WPF

113

Od dłuższego czasu utknąłem w tworzeniu Windows Forms (zacząłem od VB6 i kontynuowałem do C # .NET 4.5) i prawie osiągnąłem granicę możliwości Windows Forms, oba używając czystego .NET i efekty specjalne w kodzie natywnym.

Próbowałem nauczyć się WPF i XAML, ale utknąłem w nowym projektancie WPF. Naprawdę wydaje się bardzo trudny w użyciu w porównaniu z projektantem Windows Forms.

Chcę wiedzieć, czy istnieją alternatywy dla projektanta WPF platformy .NET, które są bardziej odpowiednie dla programistów Windows Forms?

Matthew Layton
źródło
7
Zwykle nawet nie korzystam z projektanta, z wyjątkiem sprawdzenia, czy ogólny układ jest taki, jakiego bym się spodziewał; w końcu piszę wszystko ręcznie w XAML i / lub używam Blend w razie potrzeby - chociaż nie jestem projektantem, więc rzadko się to zdarza.
Patryk Ćwiek
Możesz użyć mieszanki Expression, ale nie sądzę, żeby to było łatwiejsze, jest bardziej dla projektantów niż dla programistów IMO. Zwykle po prostu wyłączam podgląd i pracuję z xml.
BlackICE,
5
Nie jest trudny w użyciu, po prostu nie jesteś do tego przyzwyczajony. Największą przeszkodą do pokonania jest zmiana paradygmatu między tymi dwiema technologiami. Kup sobie dobrą książkę o XAML, a kiedy już przyzwyczaisz się do XAML, nie będziesz już nawet używać projektanta - wpiszesz XAML bezpośrednio.
slugster
3
@slugster, zastanawiałem się nad tym. To samo stało się z HTML ... Kiedyś budowałem interfejs użytkownika za pomocą Dreamweavera, a teraz koduję HTML ręcznie
Matthew Layton

Odpowiedzi:

175

Lubię blogować o artykułach dla początkujących w WPF, a jest kilka, które mogą Ci w szczególności pomóc:

Podsumowując, największą różnicą między Winforms i WPF jest to, że w WPF warstwa danych (the DataContext) jest twoją aplikacją, podczas gdy w WinForms twoją aplikacją jest warstwa UI.

Aby spojrzeć na to w inny sposób, za pomocą WPF aplikacja składa się z tworzonych obiektów i używasz szablonów i innych obiektów interfejsu użytkownika, aby poinformować WPF, jak narysować składniki aplikacji.

To przeciwieństwo WinForms, w których tworzysz aplikację z obiektów interfejsu użytkownika, a następnie dostarczasz im potrzebne dane.

Z tego powodu projektant nie jest tak często używany, ponieważ komponenty aplikacji są projektowane w kodzie, a projektant jest potrzebny tylko do narysowania przyjaznego dla użytkownika interfejsu, który odzwierciedla klasy danych (zwykle ModelsiViewModels )

Osobiście wolę ręcznie wypisywać cały mój kod XAML, ponieważ jest szybszy i nie powoduje tak dużego bałaganu, jak robi to projektant WPF typu przeciągnij / upuść, chociaż czasami używam Projektanta, aby wyświetlić podgląd mojego interfejsu użytkownika lubić.

Tak więc, aby odpowiedzieć na pytanie, czy istnieją inni projektanci WPF odpowiedni dla programistów WinForms, proponuję, aby zamiast szukać innego projektanta, zamiast tego dowiedz się, jak używać WPF w sposób, w jaki ma być używany. Używanie WPF tak, jak to jest WinForms, oznacza, że ​​tracisz wiele z tego, co czyni go tak wspaniałym :)

Rachel
źródło
14
Całkowicie zgadzam się z @Rachel. Najważniejszą rzeczą, jaką należy sobie uświadomić, kiedy przyjrzymy się WPF, jest zrozumienie, że interfejs użytkownika to nie dane i odpowiednie działanie.
Federico Berasategui,
2
@Rachel - tylko po to, by zagrać adwokata diabła: Zaczynając od interfejsu użytkownika (które przyciski, pola tekstowe itp. Pojawiają się w oknie) pomaga skoncentrować aplikację na tym , co chcesz zrobić. Reszta to tylko szczegóły implementacji, jak chcesz to zrobić.
Asaf
3
@HighCore spójrz na stackoverflow.com/questions/982978/mvvm-for-winforms, a będziesz musiał przyznać, że Winforms to tylko komponent widoku / interfejsu użytkownika, w którym obiekty biznesowe można powiązać z kontrolkami użytkownika. Okay: WPF jest bardziej odpowiedni dla MVVM, ale mimo to Winforms może również działać w takim wzorcu projektowym. Rachel stwierdza, że ​​„jest to przeciwieństwo WinForms, w których tworzysz aplikację z obiektów interfejsu użytkownika, a następnie dostarczasz im potrzebne dane”. Chociaż to nieprawda. Zawsze myślę przynajmniej o danych i widoku. Dane i Winforms / WPF / HTML cokolwiek.
Bernoulli IT
2
Obsługuje wiązanie danych przynajmniej na poziomie wprowadzania / modyfikacji danych. Podejrzewam, że te 99,9999999% programistów również będzie bałaganić w WPF. Ale zakończmy tę dyskusję. WPF jest zdecydowanie bardziej wydajny / odpowiedni dla MVVM i oddzielenia problemów, ale myślę, że ty i Rachel popychacie Winforms w negatywnym kącie. Zwłaszcza jeśli nadal używasz słów, których używasz ...
Bernoulli IT
3
@YoupTube Masz rację, Winforms obsługuje wiązanie danych i możliwe jest tworzenie własnych niestandardowych powiązań dla przypadków, w których domyślny system powiązań również nie zadziała. Napisałem tę odpowiedź i moje artykuły na blogu z myślą o początkujących i zazwyczaj początkujący myślą w kategoriach komponentów interfejsu użytkownika, a nie obiektów danych. Ponadto powiązanie w WinForms nie zawsze istniało w takim stanie, w jakim jest teraz, więc wielu programistów, którzy dorastali z WinForms lub którzy są przyzwyczajeni do innych technologii, które nie używają powiązań, często nie rozpoznaje tej kluczowej różnicy podczas przełączania do związanej architektury. :)
Rachel
9

Chociaż niektórzy się nie zgadzają, odradzałbym również korzystanie z projektanta VS. Przynajmniej nie tworzyć interfejsu. Jeśli chcesz uzyskać pierwsze wrażenie na temat swojej implementacji bez uruchamiania aplikacji, jest to dobra przeglądarka, przynajmniej tak długo, jak nie są używane żadne zaawansowane rzeczy, takie jak Stylesi Templates. Ale IMHO, jego wynik przeciągnij i upuść powinien być używany tylko jako prototyp i dlatego należy go wyrzucić, gdy nie jest już potrzebny.

Oto kilka ważnych dla mnie powodów, aby go nie używać.

  1. Projektant VS pracuje z poprawionymi marginesami i wyrównaniami (co zwykle nie jest konieczne, jeśli używasz elementów sterujących układu), co oznacza, że ​​musisz dotykać wielu kontrolek, jeśli zmieniają się wymagania. Jeśli jesteś głęboko w XAML i mechanice WPF, możesz stworzyć aplikacje, które można modyfikować przy niewielkim wysiłku, pod względem wyglądu i stylu.

  2. Ponieważ projektant generuje xaml, kompozycja nie jest optymalna, a interfejs użytkownika może działać źle. Nie zmierzyłem tego, to tylko uczucie.

Dużo lepszą alternatywą jest MS Blend , chociaż początek jest inny, ale łatwy. Jego wynik przeciągania i upuszczania jest znacznie lepszy niż wynik projektanta VS.
Ale jest to dość potężne narzędzie, które pomaga używać całkiem potężnych elementów do tworzenia najnowocześniejszego interfejsu użytkownika. Polecam odwiedzić przynajmniej krótki warsztat, aby poznać jego możliwości.

Wracając do pytania, IMHO i myślę, że wiele osób się z tym zgadza, kup sobie dobrą książkę, np. WPF Unleashed i później, jeśli chcesz dowiedzieć się więcej o szczegółach, WPF Pro . Istnieje wiele funkcji, które różnią się od Winforms. Nie poznasz ich używając żadnego projektanta. Myślę, że to najlepsze podejście.

Proszę również wziąć pod uwagę, że istnieje wiele frameworków i bibliotek (np. MVVM light , WPFToolkit ), które już rozwiązują niektóre typowe problemy. Nie ma więc potrzeby odkrywania na nowo koła.

DHN
źródło
9

Wiem, że to stare pytanie, ale z korzyścią dla każdego, kto na to patrzy, myślę, że powinienem trochę przywrócić równowagę - czytając niektóre inne odpowiedzi, mam wrażenie, że niektóre z `` nie używaj projektanta „sentyment pochodzi z niewłaściwego korzystania z niego. Ten samouczek jest całkiem dobry, abyś mógł zacząć i odpowiada na niektóre uwagi krytyczne w innych postach.

Na przykład możesz przełączyć się z układu opartego na marginesach podobnego do Winforms, który jest domyślny po upuszczeniu kontrolki, do stylu bardziej WPF, klikając prawym przyciskiem myszy i wybierając opcję „Resetuj układ”

Ten film podobny wątek.

Nadal wolę projektanta VS2010 w równowadze - VS2013 wydaje się być nieco błędny podczas przeciągania i upuszczania na TabItems **, (którego mój obecny projekt dużo używa) - ale widok konspektu dokumentu VS2013 pozwala również przenosić rzeczy w tym widoku , co może być prawdziwym plusem.

Jednak naprawdę, aby w pełni wykorzystać możliwości WPF i xaml, musisz biegle posługiwać się zarówno widokiem projektanta, jak i widokiem xaml oraz przełączać się między nimi; jeśli unikasz projektanta, tracisz coś, co może ci bardzo pomóc.

** Edycja - chociaż wydaje się, że zostało to poprawione w Update 3 dla VS 2013 oraz w podglądzie VS14, do tej pory czasami mam dziwne zachowanie.

peterG
źródło
7

Przede wszystkim w WPF (XAML) w programie Visual Studio należy zawsze używać kodu XAML do tworzenia interfejsu użytkownika i nie przeciągać i upuszczać kontrolki! Musisz utrzymywać swój kod w czystości. Możesz użyć Expression Blend, aby ci pomóc, jest bardziej zorientowany na grafikę dzięki przeciąganiu i upuszczaniu, ale nie jest darmowy.

To nie jest wielka krzywa uczenia się, ale myślę, że powinieneś nauczyć się robić swój Xaml ręcznie, zamiast szukać alternatywy.

mlemay
źródło
1
Przeciągnij i upuść nie szkodzi, chociaż jeśli wolisz pisać, to też jest w porządku. Ręczne wpisywanie nigdy nie jest kluczem dla WPF.
David
3
Kiedy przeciągasz i upuszczasz w WPF, widzę, że często masz duży margines -1200 i takie rzeczy w ogóle nie mają sensu ... Zawsze robiłem to ręcznie, na pewno lepiej
mlemay
1
To jest poza tematem. Upewnij się, że problem dotyczy wszystkich, a nie tylko ciebie. Poza tym nie możesz powiedzieć, że przeciągnij i upuść jest złe, jeśli masz jakieś problemy. Poleganie na projektancie jest nadal potrzebne i czasami preferowane, może się okazać, że to prawda, jeśli wiesz, jak ekspresja jest mile widziana zarówno przez projektantów, jak i programistów.
David
1
tak, jeśli używasz mieszanki ekspresji, ok, możesz to zrobić, ale rozmawiałem w studio wizualnym ...
mlemay
12
Myślę, że radzenie komuś pochodzącemu z Forms i uruchamianie WPF, aby nie korzystał z projektanta, to naprawdę zły pomysł. Najszybszym sposobem zrozumienia XAML jest użycie przeciągania i upuszczania, a następnie obserwowanie kodu.
Ucodia
7

Przeszedłem przez ten proces, tak jak ty. Później uczyłem wszystkich w mojej firmie WPF. Jest kilka ważnych lekcji, których się nauczyłem i wszyscy, których znam, którzy pracują z WPF.

  1. Jeśli pracujesz z kontrolkami interfejsu użytkownika w kodzie znajdującym się za nim, .... Wtedy robisz to źle. Nie ma absolutnie potrzeby zajmowania się kontrolkami interfejsu użytkownika w kodzie za nim.
  2. Nie potrzebujesz programisty wizualnego, aby go kliknąć. Pracując tylko z XAML, jesteś znacznie bardziej produktywny. Użyj opcji Kopiuj / Wklej. Nie ufaj swoim umiejętnościom pisania. Pozwoli to zaoszczędzić wiele bólów głowy.
  3. Pomyśl o XAML jako o oknie, które znajduje się nad danymi. W kodzie za tobą zmieniasz dane. W języku XAML definiujesz, w jaki sposób interfejs użytkownika będzie interpretował dane.
  4. Konwertery są niesamowite. Gdy tylko zdobędziesz kluczową liczbę konwerterów, twoja produktywność wzrośnie do nieba. Przejmą rolę szalonej liczby kontrolerów obsługujących zdarzenia, które ukrywają lub zmieniają rozmiar, lub cokolwiek w interfejsie użytkownika,

To sprawia, że ​​tworzenie interfejsu użytkownika jest zabawne. Zwłaszcza, gdy dowiesz się, jak lubi bawić się procesami Asyc. To naprawdę usuwa wiele bólów głowy spowodowanych przez WinForms.

user853710
źródło