Próbuję uzyskać przegląd różnych technologii do wykorzystania podczas tworzenia GUI w świecie Windows.
Dla kontekstu buduję małą platformową grę wieloosobową 2D. (Tylko do celów edukacyjnych ...)
Mój nauczyciel mówi, że uważa, że WPF jest właściwą drogą, ale wydaje się, że porównuje go tylko do Windows Forms.
Rozumiem, że tutaj w 2015 roku Windows Forms jest całkowicie martwy?
W tych innych pytaniach dotyczących stackover mówią, że WinRT + XAML służy do budowania interfejsu GUI Metro (rzecz z kafelkami w oknie 8!) I wydaje się, że WPF jest używany tylko na pulpicie w oknie 7/8 i jest blisko związany z Silverlight.
- Pulpit to miejsce, w którym żyją stare aplikacje (czerwony. WFP).
- Nowa klasa aplikacji, aplikacje Metro, może być budowana na wiele sposobów, w tym za pomocą VB.NET, C # lub C ++. Te trzy opcje językowe mogą używać XAML do tworzenia interfejsu użytkownika. Alternatywą jest użycie JavaScript / HTML5 / CSS do tworzenia zarówno interfejsu użytkownika, jak i kodu aplikacji.
Moje prawdziwe pytanie brzmi: czy nie ma JEDNEGO dobrego sposobu na budowanie GUI w świecie okien?
A jeśli nie, jakich technologii należy użyć w Windows 7, Window 8 (Desktop i Metro), Window Phone (i Windows 10!), A nawet x-box.
Czy w ten sposób można porównać różne technologie?
Jak myślisz, w co warto zainwestować czas?
źródło
Odpowiedzi:
Jest tu dużo, ale tutaj idzie:
Jeśli chodzi o to, na co spędzać czas, to zależy od tego, na co się wybierasz :). Nauka WPF / UWP + XAML przyniesie Ci wiele korzyści, jeśli chcesz pozostać „na bieżąco” w tworzeniu GUI .NET, więc to właśnie wybrałbym. WPF ma najwięcej funkcji, więc zaczynając od tego, wystarczy znaleźć obejścia tego, czego brakuje w UWP (lub dowolnej innej technologii opartej na XAML).
Jeśli to zrobisz, upewnij się, że nauczyłeś się wzorca MVVM (Model-View-View Model). Działa bardzo dobrze z technologiami opartymi na XAML i umożliwia udostępnianie dużej ilości logiki między aplikacjami WPF i UWP. Ta sama logika może być również używana, jeśli ostatecznie opracujesz aplikacje Xamarin na iOS / Android itp.
Pamiętaj, że do tworzenia prawdziwych gier będziesz potrzebować rzeczywistego szkieletu gry (takiego jak Unity3D lub nawet XNA). Możesz to zrobić w WPF i jest to lepszy wybór niż Winforms, ale żaden z nich nie jest tak naprawdę przeznaczony do gier.
źródło
RenderTransform
,Viewport3D
i tym podobne. Są przyspieszane sprzętowo.To dość stary wątek, ale tak jak natknąłem się na to przez Google (z powodu zainteresowania), może ktoś inny też mógłby tu dotrzeć. To jest pytanie, które jest ciągle zadawane przez nowych programistów. Więc chciałbym również odpowiedzieć na kilka rzeczy, teraz, gdy Windows 10 jest oficjalnie wydany.
Po pierwsze, nie należy już zaczynać od Windows Forms. Na razie jest to najbardziej dojrzała technologia, ale nie będzie dalszego rozwoju Windows Forms, jest tylko w fazie konserwacji. WPF jest aktywnie rozwijany (ostatnio czytałem). Ale teraz aplikacje Windows Universal Apps (WinRT) nie muszą już być używane na pełnym ekranie i mogą być używane w trybie okienkowym, podobnie jak inne aplikacje komputerowe (WPF i WinForms). Zwiększa to znacznie ich użyteczność na komputerach innych niż tablety. Wierzę, że będzie to również przyszłość aplikacji komputerowych. Chociaż oprogramowanie WPF jest tradycyjnymi aplikacjami komputerowymi (bez uprawnień, tylko UAC). Tak czy inaczej, bez względu na to, czy uczysz się programowania WPF czy WinRT (używając .Net), w końcu nauczysz się obu. Oba są XAML + C # (lub innym językiem .Net). Właśnie uczyłem się WPF, kiedy pojawił się WinRT z Windows 8. Czułem się jak w domu, tylko kilka drobnych zmian, do których bardzo szybko się przyzwyczaiłeś. Nie mam pewności co do scenariusza MVVM (powiązanie danych) w WinRT. Wciąż sam uczę się tego aspektu WPF.
Window 10 właśnie został uruchomiony. Windows 8 / 8.1 nie odniósł takiego sukcesu jak Windows 7. Więc jeśli chcesz zbudować aplikację, która ma szersze grono odbiorców, powinieneś na razie skorzystać z WPF. Ale w niedalekiej przyszłości WinRT będzie właściwą drogą.
Na pytanie „jakich technologii należy używać w systemach Windows
7, Window 8 (Desktop i Metro), Window Phone (i Windows 10!), A nawet x-box” ”, jedyną odpowiedzią są aplikacje uniwersalne systemu Windows. To jest dokładny powód, dla którego ta struktura została stworzona. Jedna technologia do tworzenia aplikacji na wszystkie urządzenia. Komputer stacjonarny, tablet, telefony (w tym Android korzystający z platformy Xamarin w pakiecie z programem Visual Studio 2015), Xbox i IoT (Internet rzeczy).źródło
Spróbuję odpowiedzieć tylko na jedno z Twoich pytań:
Czy Windows Forms jest całkowicie martwy?
Nie, technologia Windows Forms nie umarła. Powiem wam dlaczego. WPF i XAML to bardzo wszechstronna i złożona technologia, dzięki której można zbudować bardzo ładny interfejs użytkownika. Ale! Ta technologia wymaga głębokiej wiedzy. W przypadku podstawowych układów nie potrzebujesz tak dużej wiedzy, ale w przypadku niektórych zaawansowanych układów powinieneś mieć głęboką wiedzę, a kiedy zacząłem z tą technologią i spędziłem dużo czasu, szukając wskazówek w google. Kiedy więc potrzebuję prostych formularzy do wprowadzania danych przez użytkownika, zawsze wybieram technologię Windows Forms, która jest bardzo prosta i bezpośrednia. Jest to również powód, dla którego ta technologia odniosła duży sukces, gdy przyszła na świat. Kiedy zaczynasz od WPF, musisz również wiedzieć, czym jest wzorzec projektowy MVVM, a niektórzy nie doświadczeni programiści są z tym myleni.
źródło
Jest kwiecień 2016 r. I nadal nie ma na to jednoznacznej odpowiedzi. Opracowujemy bardzo nowoczesną aplikację komputerową do monitorowania wydajności w czasie rzeczywistym, która musi renderować wiele wykresów i ekranów, zmieszanych z tekstem i różnymi innymi grafikami. Nasza aplikacja jest C #, WPF z .NET Framework 4.5.2, ale nadal piszemy niektóre komponenty przy użyciu WinForms i GDI +, aby uzyskać akceptowalną wydajność. Po prostu nie osiągnęliśmy tego z WPF. Stworzyliśmy nawet kilka wyświetlaczy w aplikacji z DirectX, ale to dodaje dużo złożoności, którą może obsługiwać tylko kilku członków zespołu. Prostota i czysta prędkość, jaką możemy uzyskać dzięki hostowaniu wyświetlacza WinForms w ramach WPF i szybkości GDI +, daje nam to, czego potrzebujemy, kosztem czystej struktury View / ViewModel, a także radzenia sobie z różnymi problemami z przestrzenią powietrzną. Nasza aplikacja jest dość specjalistyczna i chciałbym całkowicie pozbyć się WinForms, ale niestety nie jest to jeszcze możliwe w naszym przypadku. Aby uzyskać czystą wydajność, musisz wybrać DirectX lub WinForms.
źródło
Moje dwa centy ... jeśli chcesz prawdziwie uniwersalnych aplikacji, czyli programów, które mogą działać na DOWOLNYM systemie operacyjnym, w tym Windows, WinForms nadal jest do zrobienia. Po prostu upewnij się, że jesteś kompatybilny z CLR i możesz wdrażać na komputerach Mac i Linux za pośrednictwem Mono. Ogromna korzyść. XAML może być fajny, ale nie zostanie przeniesiony na inne systemy operacyjne.
Osobiście uważam, że model biznesowy UWP z piaskownicą (ruchomą?) Jest przerażający; przeciwdziała otwartości, którą Windows reprezentował od samego początku.
źródło
Z technologiami Microsoft pracuję od ponad 10 lat. Najważniejszą rzeczą, której się nauczyłem, jest nie tylko słuchanie tego, co oferuje Microsoft. Kiedy Microsoft mówi, że to przyszłość, ma 50% szans na niepowodzenie. Microsoft na pewno zrobi wszystko, co w jego mocy, aby promować produkty, w które zainwestował, ale to nie znaczy, że powinieneś podążać. Zobacz, co się stanie z WCF i Silverlight.
Chociaż WPF jest bardzo przyjemną platformą do nauki, ma ogromną krzywą uczenia się. Nie sądzę, aby jakikolwiek programista mający mniej niż 5-letnie doświadczenie w programowaniu mógł dobrze wykonać WPF.
Postępując zgodnie ze wzorcem MVVM, przekonasz się, że zrobienie czegoś stosunkowo łatwego w WinForm może stać się bardzo trudne w WPF. Na przykład pokoloruj komórkę na podstawie jakiegoś warunku po aktualizacji lub przewiń wiersz w widoku i podświetl go.
Oczywiście możesz powiedzieć, że nie musisz robić MVVM. Po prostu umieść kod w kodzie i spraw, aby działał. Tak, to zadziała, ale jaki jest sens korzystania z WPF? Dlaczego nie skorzystać po prostu z formularza wygranej?
źródło
Jest to stary wątek, ale ważny z obecnym postępem w zakresie platformy .NET, funkcjami języka C # i zwiększonym naciskiem na język C # jako wybór do tworzenia gier.
Szczerze mówiąc, WPF prawie nigdy nie jest wybierany jako platforma do gier ac #. Problemy z przestrzenią powietrzną WPF dość szybko odstraszyły ludzi. Nie sądzę, aby wiele (jeśli w ogóle) głównych tytułów lub głównych silników gier obsługiwało WPF jako platformę docelową z tego powodu. WPF to jednak świetna platforma do uruchamiania gier!
WinForms, będąc teraz w trybie konserwacji, nadal będzie ważnym wyborem przez wiele lat. Jest sprawdzony i stabilny. Z tego, co widziałem, nawet w 2017 roku WinForms jest nadal najpopularniejszą platformą wybieraną do tworzenia gier w języku C #.
Patrząc na dane z ankiety dotyczącej sprzętu Steam , widać, że w momencie pisania tej odpowiedzi (lipiec 2017 r.) Dominującą platformą do gier na komputery PC jest obecnie 64-bitowy system Windows 10 z 50% udziałem w rynku, a następnie 64-bitowy system Windows 7 z 32% i Windows 8.1 64-bit na prawie 7%. Udział w rynku wszystkich innych platform OS jest tak mały, że nie warto brać pod uwagę niczego innego niż te trzy.
Biorąc pod uwagę obecny stan gier komputerowych, WinForms jest najczęstszym mianownikiem dla wszystkich 3 najlepszych platform PC. Patrząc w przyszłość, platforma UWP będzie najlepszą platformą docelową do tworzenia gier C #, ponieważ Windows 7 i 8 stracą znaczący udział w rynku na rzecz Windows 10, chyba że pojawi się nowa platforma, która go zastąpi. Więc to tylko liczby.
W przypadku wyboru w oparciu o najlepszy poziom kompatybilności na platformę systemu operacyjnego zamiast wspierania maksymalnego udziału w rynku, wybory byłyby bardziej następujące:
Większość innych odpowiedzi koncentruje się na tworzeniu standardowych aplikacji Windows, ale tworzenie gier to zupełnie inna dziedzina i różne czynniki będą miały wpływ na twoje wybory, takie jak docelowy system operacyjny i to, jaki wybór interfejsu API grafiki lub silnika gry faktycznie obsługuje najlepiej.
źródło
WinRT jest na desktopie już od dłuższego czasu, piszę WinRT, który działa na moim deskopie. W systemie Windows 10 te aplikacje będą obsługiwać lokalizacje niezadokowane (w oknie, jak można je tradycyjnie znać).
Nie polecałbym WinForms ani WPF nikomu, kto zaczyna dzisiaj. Powinni przede wszystkim uczyć się WinRT / XAML. I naucz się Win32 / .net tak, jak tego potrzebują, w zależności od wybranego języka.
„Mówią, że WinRT + XAML jest przeznaczony do budowania GUI Metro (sprawa kafelków w Windows 8!)” - To jest tak nadmierna abstrakcja, że jest bezużyteczna. WinRT to środowisko uruchomieniowe, podobnie jak Win32, nie jest przeznaczone tylko dla GUI, więc „mówią” to kompletne BS. XAML to warstwa interfejsu użytkownika (podobnie jak XAML w WPF), ale mówiąc, że to Metro GUI jest również błędne, nie ma już czegoś takiego jak Metro GUI. XAML to warstwa interfejsu użytkownika systemu Windows. I "Kafelki Windows 8!" jest wyrazem wizji tunelowej niektórych ludzi. To tak, jakbym powiedział, że Win32 jest menu startowym. Widzisz, jakie to śmieszne stwierdzenie.
źródło
Wpadłem na to pytanie jakiś rok temu. Doszedłem do wniosku, że XAML, WPF i WinRT to na początek odpowiednie środowisko programistyczne.
Bardzo polecam użycie .Net Framework dla warstwy danych (w tym usług internetowych i warstwy RESTful (JSON)) oraz czystego HTML5 / CSS3 i JavaScript do warstwy prezentacji internetowej.
W systemie Windows 10 można zintegrować dowolną aplikację internetową jako aplikację metra zaraz po wyjęciu z pudełka.
WinRT, XAML, WPF i podobne rzeczy ms działają tylko w systemie Windows i mają wiele ograniczeń.
Tak więc po roku nadal jestem bardzo zadowolony z mojej decyzji, by nie używać WinRT lub XAML w moim nowym projekcie.
źródło