Windows GUI: WPF หรือ WinRT (2015+)


94

ฉันพยายามหาภาพรวมของเทคโนโลยีต่างๆเพื่อใช้ในการสร้าง GUI ใน Windows World

สำหรับบริบทฉันกำลังสร้างเกมแบบผู้เล่นหลายคนบนแพลตฟอร์ม 2d เล็กน้อย (เพียงเพื่อการเรียนรู้ .. )

ครูของฉันบอกว่าเขาคิดว่า WPF เป็นวิธีที่ถูกต้อง แต่ดูเหมือนว่าเขาจะเปรียบเทียบกับ Windows Forms เท่านั้น

การพูดน้อยของฉันคือที่นี่ในปี 2015 Windows Forms ตายไปแล้ว?

ในคำถามซ้อนทับอื่น ๆ พวกเขากล่าวว่า WinRT + XAML ใช้สำหรับการสร้าง Metro GUI (สิ่งที่เป็นหน้าต่าง 8 กระเบื้อง!) และดูเหมือนว่า WPF เป็นสิ่งที่ใช้สำหรับเดสก์ท็อปใน Window 7/8 เท่านั้นและใกล้เคียงกับ Silverlight

Windows 8 Runtime (WinRT / Windows Store apps / Windows 10 Universal App) เปรียบเทียบกับ Silverlight และ WPF อย่างไร

  • เดสก์ท็อปเป็นที่ที่มีแอปเก่า ๆ อยู่ (สีแดง WFP)
  • แอปพลิเคชันคลาสใหม่แอปพลิเคชัน Metro สามารถสร้างได้หลายวิธีรวมถึง VB.NET, C # หรือ C ++ ตัวเลือกภาษาทั้งสามนี้สามารถใช้ XAML ในการสร้าง UI ได้ อีกทางเลือกหนึ่งคือการใช้ JavaScript / HTML5 / CSS สำหรับการพัฒนาทั้ง UI และโค้ดแอปพลิเคชัน

คำถามที่แท้จริงของฉันคือไม่มีวิธีใดที่ดีในการสร้าง GUI ใน Window World

และถ้าไม่ควรใช้เทคโนโลยีใดใน Window 7, Window 8 (เดสก์ท็อปและเมโทร), Window Phone (และ Windows 10!) และแม้แต่ x-box ..

ถ้าเทียบกับเทคโนโลยีที่แตกต่างกันด้วยวิธีนี้?

คุณคิดว่าอะไรคือสิ่งที่ถูกต้องในการลงทุนเวลา?


5
"WPF หรือ WinRT?" เรียนรู้ทั้ง WPF สำหรับเดสก์ท็อป Windows Runtime สำหรับอุปกรณ์มือถือ เทคโนโลยีเหล่านี้มีหลายอย่างที่เหมือนกันเช่น XAML และเฟรมเวิร์กที่คล้ายกันมาก คุณสามารถเขียนโค้ดที่รองรับทั้งสองแพลตฟอร์มเป็น Portable Class Libraries
Clemens

2
@Clemens บิตสุดท้ายเป็นบิตที่ทำให้เข้าใจผิด ไลบรารี. NET มาตรฐานจะต้องสร้างขึ้นใหม่ / กำหนดเป้าหมายเพื่อทำงานกับแอพ WinRT ซึ่งอาจต้องมีการเปลี่ยนแปลงโค้ดสำหรับบางคลาส
BradleyDotNET

3
Windows Forms ยังไม่ตายโดยสิ้นเชิง แต่คุณอาจไม่ต้องการใช้จนกว่าคุณจะคุ้นเคยกับมันแล้ว
Casey

2
วัตถุประสงค์ของคุณ "อยู่ในปัจจุบันใน Windows GUI" ค่อนข้างเป็นอันตรายในความคิดของฉัน มีอนาคตเล็กน้อยสำหรับนักพัฒนาโดยเฉลี่ยในระยะยาว MS ได้เปลี่ยนเครื่องมือสำหรับ GUI หลายครั้งในขณะที่ JavaScript และ HTML5 ยังคงได้รับความนิยม หากคุณกำลังพัฒนาเพื่อหาเลี้ยงชีพอย่าลืมสิ่งอื่นใด มีข้อยกเว้นเล็กน้อยสำหรับสิ่งนี้หากคุณกำลังทำงานกับ MS หรือผู้ให้บริการบุคคลที่สามของ GUI หรือเต็มใจที่จะติดอยู่กับการรักษารหัสเก่า
NoChance

3
แม้แต่ MFC ก็ยังไม่ตายทั้งหมดและไม่ใช่ Win32 ด้วยเช่นกัน แต่ MFC สำหรับเกมคือสิ่งที่คนบ้าจะเลือก
Lothar

คำตอบ:


132

มีมากมายที่นี่ แต่จะมีดังนี้:

  • Windows Forms (Winforms) ตายหรือไม่ ไม่ยังคงได้รับการสนับสนุนอย่างแข็งขัน ที่กล่าวว่าเป็นเทคโนโลยีที่น่ากลัวในการทำงาน (อย่างน้อยหนึ่งครั้งคุณก็รู้ถึงความมหัศจรรย์ของ WPF)
  • หากคุณต้องการสร้างแอปเดสก์ท็อปที่ดูดีและออกแบบมาอย่างดี(คลาสสิกไม่ใช่ Metro) WPF คือคำตอบในรูปแบบ. NET ที่บริสุทธิ์ คุณสามารถใช้ WinRT API (เช่นคลาสซ็อกเก็ต) แต่คุณไม่สามารถเรียกใช้บน OS ก่อน Windows 8 UI ยังคงเป็น WPF
  • แอพ WinRT มีไว้สำหรับ Windows 8 Store (มีให้บริการใน Windows 10 Store) คุณไม่สามารถใช้ WPF ที่นี่หรือ WinRT บนเดสก์ท็อปได้ดังนั้นตำแหน่งที่คุณปรับใช้จะกำหนดสิ่งที่คุณใช้ คุณเข้าใจภาษา / เทคโนโลยีที่ถูกต้อง
  • Windows Phone 8 (เลิกใช้แล้ว) ใช้รันไทม์ที่แก้ไขแล้วของ WinRT (ซึ่งมีการเปลี่ยนแปลงใน Windows 10) สำหรับ Win8 / WP8 คุณสามารถใช้แอป "Universal" เพื่อแชร์โค้ดส่วนใหญ่ระหว่างแอป WinRT มาตรฐานและแอป Windows Phone
  • Windows 10 ใช้ Universal Windows Platform (UWP) ซึ่งใช้. NET Core โค้ดที่พัฒนาสำหรับ Windows 10 ยังสามารถใช้ได้กับ Xbox One, Windows Phone 10 และ HoloLens WPF ยังคงเป็นแอปเดสก์ท็อป "มาตรฐาน"
  • XBox เป็นเรื่องยุ่งยาก XNA ได้หายไปแล้วและ Microsoft ดูเหมือนจะห่างหายไปจากเนื้อหาที่สร้างโดยชุมชนสำหรับแพลตฟอร์ม ที่กล่าวว่า Unity3D สามารถปรับใช้กับ XBox ได้และฉันเชื่อว่าการพัฒนา DirectX (C ++) มาตรฐานใช้ได้ผล แอป Universal Windows Platform สามารถปรับใช้บน Xbox One ได้และดูเหมือนว่าจะเป็นกลยุทธ์ของ Microsoft ในอนาคต

เท่าที่จะใช้เวลาไปกับสิ่งที่คุณกำหนดเป้าหมาย :) การเรียนรู้ WPF / UWP + XAML จะทำให้คุณได้รับประโยชน์มากมายหากคุณต้องการที่จะอยู่ "ปัจจุบัน" ในการพัฒนา. NET GUI ดังนั้นนั่นคือสิ่งที่ฉันต้องการ WPF มีคุณสมบัติมากที่สุดดังนั้นเมื่อเริ่มต้นที่นั่นคุณต้องหาวิธีแก้ปัญหาสำหรับสิ่งที่ขาดหายไปใน UWP (หรือเทคโนโลยีที่ใช้ XAML อื่น ๆ )

หากคุณทำเช่นนั้นอย่าลืมเรียนรู้รูปแบบ MVVM (Model-View-View Model) มันทำงานจริงๆดีกับเทคโนโลยี XAML ตามและช่วยให้คุณสามารถแบ่งปันมากของตรรกะระหว่างการใช้งาน WPF และ UWP ของคุณ สามารถใช้ตรรกะเดียวกันนี้ได้หากคุณพัฒนาแอปพลิเคชัน Xamarin สำหรับ iOS / Android เป็นต้น

โปรดทราบว่าสำหรับการพัฒนาเกมที่แท้จริงคุณจะต้องการเฟรมเวิร์กเกมจริง (เช่น Unity3D หรือแม้แต่ XNA) คุณสามารถทำได้ใน WPF และนั่นเป็นทางเลือกที่ดีกว่า Winforms แต่ก็ไม่ได้มีไว้สำหรับเกม


ขอบคุณสำหรับคำตอบฉันมีให้มินิเกมของฉันเริ่มต้นด้วย XNA ดังนั้นฉันเสียใจที่ได้ยินว่าพวกเขาจะลบมันออก แต่ฉันรอคอยที่จะเห็นว่า Windows 10 จะนำอะไรมาให้เราบ้าง
Alf Nielsen

@AlfNielsen ฉันไม่แน่ใจว่าจะสิ้นสุดการสนับสนุนเมื่อใด แต่ดูเหมือนว่าพวกเขาจะไม่อัปเดตในเร็ว ๆ นี้
BradleyDotNET

2
ดูเหมือนว่า VS จะให้การสนับสนุน Unity อย่างเต็มที่ดังนั้นขอให้โชคดีในการทำนายสิ่งนั้น! :)
ทม

2
ความเร็วในการเรนเดอร์ WPF โดยใช้คลาส WPF เช่น Visual นั้นแย่มากสำหรับเกมหรืออะไรก็ตามแบบเรียลไทม์
Winger Sendon

2
ดู @WingerSendon ที่RenderTransform, Viewport3Dและชอบ พวกเขาเร่งด้วยฮาร์ดแวร์
BradleyDotNET

26

มันค่อนข้างเก่า แต่เหมือนฉันเจอสิ่งนี้ผ่าน google (ไม่สนใจ) อาจมีคนอื่นมาที่นี่เช่นกัน นี่เป็นคำถามที่โปรแกรมเมอร์มือใหม่ถามซ้ำแล้วซ้ำเล่า ดังนั้นฉันต้องการตอบบางสิ่งเช่นกันตอนนี้ Windows 10 เปิดตัวอย่างเป็นทางการแล้ว

ประการแรกไม่ควรเริ่มต้นด้วย Windows Forms อีกต่อไป เป็นเทคโนโลยีที่สมบูรณ์แบบที่สุดในตอนนี้ แต่จะไม่มีการพัฒนา Windows Forms เพิ่มเติม แต่ตอนนี้อยู่ในขั้นตอนการบำรุงรักษา WPF ได้รับการพัฒนาอย่างแข็งขัน (ฉันอ่านล่าสุด) แต่ตอนนี้ Windows Universal Apps (WinRT one) ไม่จำเป็นต้องใช้แบบเต็มหน้าจออีกต่อไปและสามารถใช้ในโหมดหน้าต่างได้เช่นเดียวกับแอปเดสก์ท็อปอื่น ๆ (WPF & WinForms) เพิ่มความสามารถในการใช้งานได้มากบนคอมพิวเตอร์ที่ไม่ใช่แท็บเล็ต ฉันเชื่อว่านี่จะเป็นอนาคตสำหรับแอปเดสก์ท็อปเช่นกัน แม้ว่าซอฟต์แวร์ WPF จะเป็นแอปเดสก์ท็อปแบบดั้งเดิม (โดยไม่มีสิทธิ์มีเพียง UAC) ไม่ว่าคุณจะเรียนรู้การพัฒนา WPF หรือ WinRT (โดยใช้. Net) คุณจะได้เรียนรู้ทั้งสองอย่าง ทั้งสองเป็น XAML + C # (หรือภาษา. Net อื่น ๆ ) ฉันเพิ่งเรียนรู้ WPF เมื่อ WinRT ออกมาพร้อมกับ Windows 8 ฉันรู้สึกเหมือนอยู่บ้านมีการเปลี่ยนแปลงเล็กน้อยเพียงไม่กี่อย่างที่คุณคุ้นเคยในไม่ช้า ไม่แน่ใจเกี่ยวกับสถานการณ์ MVVM (การผูกข้อมูล) ใน WinRT ฉันยังคงเรียนรู้แง่มุมนั้นของ WPF ด้วยตัวเอง

Window 10 เพิ่งเปิดตัว Windows 8 / 8.1 ไม่ประสบความสำเร็จเท่า Windows 7 ดังนั้นหากคุณต้องการสร้างแอปที่มีผู้ใช้งานกว้างขึ้นคุณควรใช้ WPF ในตอนนี้ แต่ในอนาคตอันใกล้ WinRT จะเป็นหนทางไป

สำหรับคำถามของคุณ "เทคโนโลยีใดที่ควรใช้ในWindow 7 , Window 8 (เดสก์ท็อปและเมโทร), Window Phone (และ Windows 10!) และแม้แต่ x-box" คำตอบเดียวคือ Windows Universal Apps นี่คือเหตุผลที่แท้จริงของกรอบนี้ได้รับการพัฒนา เทคโนโลยีเดียวที่จะใช้ในการพัฒนาแอปสำหรับอุปกรณ์ทั้งหมด เดสก์ท็อปแท็บเล็ตโทรศัพท์ (รวมถึง Android ที่ใช้ Xamarin ที่มาพร้อมกับ Visual Studio 2015), Xbox และ IoT (Internet of Things)


19
Universal Apps ดูเหมือนจะไม่ทำงานบน Windows7 หรือ Windows8 "แอปสากล" เป็น "สากล" สำหรับอุปกรณ์ Win10 เท่านั้น
Dragontamer5788

Xamarin ยังคงเป็นของตัวเอง (ไม่มี Universal Apps) และฉันไม่แน่ใจว่าสามารถปรับใช้กับ Xbox ได้เช่นกัน
BradleyDotNET

2
@PrateekJain: ไม่ในการเรียกใช้แอป UWP บน Windows 8: stackoverflow.com/a/30317960/199364
ToolmakerSteve

6
WinForms ยังคงยอดเยี่ยมสำหรับ GUI ที่รวดเร็วและสกปรก - WPF นั้นดี แต่ต้องใช้รหัสสำเร็จรูปจำนวนมาก (และเส้นโค้งการเรียนรู้ที่สูงชัน) เพื่อใช้ "อย่างถูกต้อง" แม้ว่าจะไม่มี MVVM ก็ตาม มัน sucks ว่า WPF ไม่ได้มีความสามารถในการ RAD จริง - และที่ XAML เป็นเพียง danged เพื่อให้ละเอียด
ได

1
สำหรับอุปกรณ์ทั้งหมดของตูดของฉัน ไมโครซอฟท์พูดอีกครั้งที่ดีที่สุด เช่นเดียวกับในสมัยก่อนที่พวกเขาเรียกมันว่าข้ามแพลตฟอร์มเพราะมันทำงานบน Windows95 และ Windows2000 อีกอย่างคือฉันไม่ต้องการให้แอปเดสก์ท็อปมีปุ่มขนาดที่น่าเกลียดเท่ากันและโดยเฉพาะต้นไม้และรายการที่ฉันต้องใช้เพื่อสัมผัส ดังนั้นจึงไม่มี UWP สำหรับฉัน
Lothar

23

ฉันจะพยายามตอบคำถามของคุณเพียงข้อเดียว:

Windows Forms ตายทั้งหมดหรือไม่?

ไม่เทคโนโลยีฟอร์มของ Windows ยังไม่ตาย ฉันจะบอกคุณว่าทำไม WPF และ XAML เป็นเทคโนโลยีที่ครอบคลุมและซับซ้อนมากและคุณสามารถสร้าง UI ที่ดีได้ แต่! เทคโนโลยีนี้ต้องใช้ความรู้อย่างลึกซึ้ง สำหรับเค้าโครงพื้นฐานคุณไม่จำเป็นต้องมีความรู้มากนัก แต่สำหรับเค้าโครงขั้นสูงบางอย่างคุณควรมีความรู้อย่างลึกซึ้งและเมื่อฉันเริ่มใช้เทคโนโลยีนี้และใช้เวลาค้นหาเคล็ดลับบางอย่างใน Google ดังนั้นเมื่อฉันต้องการฟอร์มง่ายๆสำหรับการป้อนข้อมูลของผู้ใช้ฉันมักจะเลือกใช้เทคโนโลยี Windows Forms ซึ่งง่ายและตรงไปตรงมามาก นี่เป็นเหตุผลว่าทำไมเทคโนโลยีนี้จึงประสบความสำเร็จอย่างมากเมื่อมาถึงโลก เมื่อคุณเริ่มต้นด้วย WPF คุณจำเป็นต้องรู้ว่ารูปแบบการออกแบบ MVVM คืออะไรและโปรแกรมเมอร์ที่ไม่มีประสบการณ์บางคนก็สับสนกับสิ่งนั้น


3
นี่คือคำตอบที่ชื่นชอบ สำหรับแอพขนาดเล็กฉันใช้ Windows Forms เพราะมันง่ายและรวดเร็วมาก สำหรับรหัสการผลิตที่ซับซ้อนฉันใช้ C ++ (พร้อม WTL) และ Side-step .NET ทั้งหมด
โรบินสัน

8
สำหรับผู้อ่านที่ไม่คุ้นเคยกับ WPF คำชี้แจงบางประการ - สำหรับรูปแบบแอปพลิเคชันพื้นฐาน WPF ต้องใช้ความพยายามมากหรือน้อยในการทำ เทมเพลตแอปพลิเคชัน VS WPF เริ่มต้นมีจุดเริ่มต้นเดียวกันกับ WinForms MVVM ไม่จำเป็นต้องทำงานกับ WPF แต่จริงๆแล้วการใช้ Binding โดยไม่มีเฟรมเวิร์ก MVVM นั้นเป็นเรื่องง่ายสำหรับแอพง่ายๆ WPF มีความใกล้ชิดทางเทคโนโลยีมากขึ้นกับ WinRT และ UWP ดังนั้นโปรดเพื่อประโยชน์ของคุณเองถือว่า Windows Forms ตายไปแล้วสำหรับสิ่งอื่นใดนอกเหนือจากการบำรุงรักษาแอปพลิเคชันเดิม
เกินไป

3
Winforms เหมาะอย่างยิ่งสำหรับการสร้างแอป "คอนโซล" ยุคใหม่ เช่นการควบคุมแท็บขั้นพื้นฐานด้วยปุ่มต่างๆมากมายและการป้อนข้อมูลของผู้ใช้ที่ทำให้ผิวสัมผัสกับสิ่งที่ปกติจะเป็นแอปคอนโซลได้อย่างมีประสิทธิภาพ
ม้วนที่

16

ตอนนี้เป็นเดือนเมษายน 2559 และยังไม่มีคำตอบที่ชัดเจนสำหรับเรื่องนี้ เรากำลังพัฒนาแอปพลิเคชั่นเดสก์ท็อปการตรวจสอบประสิทธิภาพแบบเรียลไทม์ที่ทันสมัยมากซึ่งต้องแสดงแผนภูมิและการแสดงผลหลาย ๆ แบบผสมผสานกับข้อความและกราฟิกอื่น ๆ แอปพลิเคชันของเราคือ C #, WPF พร้อม. NET Framework 4.5.2 แต่เรายังคงเขียนส่วนประกอบบางส่วนโดยใช้ WinForms และ GDI + เพื่อให้ได้ประสิทธิภาพที่ยอมรับได้ เรายังไม่ประสบความสำเร็จด้วย WPF เราได้พัฒนาจอแสดงผลสองสามจอในแอปพลิเคชันด้วย DirectX แต่นั่นเพิ่มความซับซ้อนมากมายซึ่งมีเพียงไม่กี่ทีมเท่านั้นที่สามารถรองรับได้ ความเรียบง่ายและความเร็วที่แท้จริงที่เราจะได้รับจากการโฮสต์การแสดงผล WinForms ภายใน WPF และความเร็วของ GDI + ทำให้เรามีสิ่งที่เราต้องการในราคาแพงของโครงสร้าง View / ViewModel ที่บริสุทธิ์พร้อมกับต้องจัดการกับปัญหาเกี่ยวกับน่านฟ้าต่างๆ แอปพลิเคชันของเราเป็นผู้เชี่ยวชาญและฉันชอบที่จะกำจัด WinForms ทั้งหมด แต่น่าเสียดายที่นี่ยังไม่สามารถทำได้ในกรณีของเรา เพื่อประสิทธิภาพที่แท้จริงคุณจะต้องไปที่ DirectX หรือ WinForms


1
ฉันจะบอกคุณว่าบางอย่างมีประสิทธิภาพมากกว่าใน WinForms มีสิ่งอื่น ๆ (โดยเฉพาะอย่างยิ่งภาพเคลื่อนไหว) ที่สิ่งที่ตรงกันข้ามเป็นจริงสำหรับ จริงอยู่ที่การไป DirectX โดยตรงน่าจะดีกว่าแต่ไม่มีใครอยากทำเช่นนี้ตามที่คุณชี้ไว้
BradleyDotNET

1
หลังจาก WinRT ฉันตัดสินใจเริ่มมองหาที่อื่น ลูกค้าของฉันและฉันไม่สามารถพึ่งพาสิ่งที่ Microsoft ต้องการได้มากเกินไปเนื่องจากมันส่งผลต่อกำไรของฉันและลูกค้าของฉัน ตอนนี้ฉันกำลังดูแอปพลิเคชันที่โฮสต์ด้วยตัวเองซึ่งใช้เว็บเซิร์ฟเวอร์ภายในเพื่อให้บริการหน้าแอปพลิเคชันในเครื่องไปยังเบราว์เซอร์ของผู้ใช้หรือการควบคุมเบราว์เซอร์แบบฝังในแอป WinForm / WPF สิ่งนี้ทำให้การพัฒนาง่ายขึ้นทำให้ฉันเข้าใกล้ความเข้ากันได้ข้ามแพลตฟอร์มและลดต้นทุนลงอย่างเห็นได้ชัด
TheLegendaryCopyCoder

6

สองเซ็นต์ของฉัน ... หากคุณต้องการแอปสากลที่แท้จริงหมายถึงโปรแกรมที่สามารถทำงานบนระบบปฏิบัติการเดสก์ท็อปใดก็ได้รวมถึง Windows WinForms ยังคงเป็นหนทางที่จะไป ตรวจสอบให้แน่ใจว่าคุณยังคงใช้งานร่วมกับ CLR ได้และคุณสามารถปรับใช้บน Mac และ Linux ผ่าน Mono ประโยชน์มหาศาล XAML อาจจะเจ๋ง แต่จะไม่ถูกย้ายไปยังระบบปฏิบัติการอื่น

ฉันเองพบว่ารูปแบบธุรกิจ UWP แบบแซนด์บ็อกซ์ (ทรายดูด) นั้นน่ากลัวมาก นับเป็นการเปิดกว้างที่ Windows ยืนหยัดมาตั้งแต่แรกเริ่ม


4

ฉันทำงานกับเทคโนโลยีของ Microsoft มากว่า 10 ปี สิ่งที่สำคัญที่สุดที่ฉันได้เรียนรู้ไม่ใช่แค่ฟังสิ่งที่ Microsoft เสนอให้คุณ เมื่อ Microsoft บอกว่านี่คืออนาคตมีโอกาส 50% ที่จะผิดพลาด Microsoft จะพยายามอย่างดีที่สุดเท่าที่จะทำได้เพื่อโปรโมตผลิตภัณฑ์ที่พวกเขาลงทุนไป แต่นั่นไม่ได้หมายความว่าคุณควรทำตาม ดูว่าเกิดอะไรขึ้นกับ WCF และ Silverlight

แม้ว่า WPF จะเป็นแพลตฟอร์มที่ดีมากในการเรียนรู้ แต่ก็มีช่วงการเรียนรู้ที่ยิ่งใหญ่ ฉันไม่คิดว่านักพัฒนาคนใดที่มีประสบการณ์การเขียนโปรแกรมน้อยกว่า 5 ปีจะสามารถทำ WPF ได้อย่างถูกต้อง

ด้วยการทำตามรูปแบบ MVVM คุณจะพบว่าการทำสิ่งที่ค่อนข้างง่ายใน WinForm อาจกลายเป็นเรื่องที่ท้าทายมากใน WPF เช่นเดียวกับการระบายสีเซลล์ตามเงื่อนไขบางอย่างหลังการอัปเดตหรือเลื่อนแถวในมุมมองและไฮไลต์

บอกได้เลยว่าไม่ต้องทำ MVVM แน่นอน เพียงใส่รหัสของคุณในโค้ดด้านหลังและทำให้ใช้งานได้ ใช่ว่าจะได้ผล แต่การใช้ WPF คืออะไร? ทำไมไม่ใช้แค่ Win Form?


1
ฉันยอมรับว่า WPF มีช่วงการเรียนรู้ที่เข้มข้น แต่เมื่อคุณผ่านพ้นจุดนั้นไปแล้วจะไม่มีการกลับไปที่ WinForms ...
Krythic

4

นี่เป็นเธรดเก่า แต่เป็นเธรดที่สำคัญกับความคืบหน้าในปัจจุบันของเฟรมเวิร์ก. NET คุณสมบัติ c # และการเน้นที่ c # เป็นตัวเลือกในการพัฒนาเกมที่เพิ่มขึ้น

WPF แทบจะไม่เคยถูกเลือกให้เป็นแพลตฟอร์มเกม ac # ด้วยความซื่อสัตย์เลย ปัญหาน่านฟ้า WPF ทำให้ผู้คนหวาดกลัวอย่างรวดเร็ว ฉันไม่คิดว่าเกมหลัก ๆ (ถ้ามี) หลายเกมหรือเอ็นจิ้นเกมสตรีมหลักจะรองรับ WPF เป็นแพลตฟอร์มเป้าหมายด้วยเหตุนี้ WPF สร้างแพลตฟอร์มที่ยอดเยี่ยมสำหรับตัวเรียกใช้เกม!

WinForms ในขณะที่อยู่ในโหมดการบำรุงรักษาจะยังคงเป็นตัวเลือกที่ใช้ได้สำหรับปีต่อ ๆ ไป ผ่านการทดสอบตามเวลาและมีเสถียรภาพ จากสิ่งที่ฉันได้เห็นแม้ในปี 2017 WinForms ยังคงเป็นแพลตฟอร์มที่ใช้กันทั่วไปมากที่สุดที่ถูกเลือกสำหรับการพัฒนาเกมตาม c #

เมื่อดูข้อมูลการสำรวจฮาร์ดแวร์ Steamคุณจะเห็นได้ว่าในขณะที่เขียนคำตอบนี้ (กรกฎาคม 2017) Windows 10 64 บิตเป็นแพลตฟอร์มเกมพีซีที่ครองส่วนแบ่งตลาด 50% ตามด้วย Windows 7 64 บิตที่ 32% และ Windows 8.1 64 บิตเกือบ 7% ส่วนแบ่งการตลาดของแพลตฟอร์มระบบปฏิบัติการอื่น ๆ ทั้งหมดมีขนาดเล็กมากจนแทบจะไม่คุ้มที่จะพิจารณาสิ่งอื่นใดนอกจากทั้งสามนี้

ด้วยความที่เป็นสถานะปัจจุบันของเกมพีซี WinForms จึงเป็นตัวหารที่พบบ่อยที่สุดในการกำหนดเป้าหมายแพลตฟอร์มพีซีชั้นนำทั้ง 3 แพลตฟอร์ม หากมองไปในอนาคต UWP จะเป็นแพลตฟอร์มเป้าหมายที่ดีที่สุดสำหรับการพัฒนาเกม c # เนื่องจาก Windows 7 และ 8 สูญเสียส่วนแบ่งการตลาดที่สำคัญไปยัง Windows 10 เว้นแต่จะมีแพลตฟอร์มใหม่เข้ามาแทนที่ นั่นก็แค่ตัวเลข

หากเลือกตามระดับความเข้ากันได้ที่ดีที่สุดสำหรับแพลตฟอร์ม OS แทนที่จะรองรับส่วนแบ่งการตลาดสูงสุดตัวเลือกจะเป็นดังนี้:

  • Windows 10: UWP
  • Windows 8.1: WinRT หรือ Windows Store
  • Windows 7: WinForms

คำตอบอื่น ๆ ส่วนใหญ่มุ่งเน้นไปที่การพัฒนาแอปพลิเคชัน windows มาตรฐาน แต่การพัฒนาเกมเป็นขอบเขตที่แตกต่างกันมากและปัจจัยที่แตกต่างกันจะมีผลต่อตัวเลือกของคุณเช่น OS เป้าหมายและสิ่งที่คุณเลือกใช้กราฟิก API หรือเอ็นจิ้นเกมรองรับได้ดีที่สุด


ในขณะที่มีมุมมองเกี่ยวกับ gamedev เป็นที่สนใจฉันไม่เข้าใจว่าทำไมคุณถึงเลือกเฟรมเวิร์ก GUI สำหรับ gamedev ที่คุณมีเอนจิ้นเกมที่มีคุณสมบัติครบถ้วนสำหรับ C # เช่น Unity มีเพียงไม่กี่เกมที่ฉันเห็นด้วย GUI แบบคลาสสิกในเกมนี้สำหรับรุ่นข้อมูลเกม (เช่นการแก้ไขแผนที่ / สินทรัพย์)
Uwy

2
ด้วยเหตุผลเดียวกับที่พวกเขาเลือกเอนจิ้นเกม: การสร้างและจัดการหน้าต่างเนทีฟอย่างมีประสิทธิภาพจากโค้ดที่มีการจัดการด้วยตัวคุณเองมันค่อนข้างทำงานได้ดี
Mike Johnson

3

WinRT อยู่บนเดสก์ท็อปมานานแล้วฉันกำลังเขียน WinRT ที่ทำงานบนเดสก์ท็อป และภายใต้ Windows 10 แอปพลิเคชันเหล่านั้นจะรองรับตำแหน่งที่ไม่ได้เชื่อมต่อ (หน้าต่างตามที่คุณอาจรู้จัก)

ฉันจะไม่แนะนำ WinForms หรือ WPF ให้กับทุกคนที่เริ่มต้นวันนี้ พวกเขาควรเรียนรู้ WinRT / XAML เป็นหลัก และเรียนรู้ Win32 / .net ตามที่พวกเขาต้องการขึ้นอยู่กับภาษาที่เลือก ..

"พวกเขาบอกว่า WinRT + XAML ใช้สำหรับการสร้าง Metro GUI (Window 8 Tile thing!)" - นี่เป็นสิ่งที่เป็นนามธรรมมากเกินไปซึ่งไม่มีประโยชน์ WinRT เป็นรันไทม์เช่นเดียวกับ Win32 ไม่ใช่แค่สำหรับ GUI ดังนั้นสิ่งที่ "พวกเขาพูด" คือ BS ที่สมบูรณ์ XAML เป็นเลเยอร์ UI (เหมือนกับ XAML ใน WPF) แต่ถ้าจะบอกว่า Metro GUI ก็ผิดเช่นกันไม่มีสิ่งที่เรียกว่า Metro GUI อีกต่อไป XAML คือ Windows UI Layer และ "กระเบื้อง Windows 8!" เป็นการแสดงออกถึงวิสัยทัศน์ของคนบางกลุ่ม มันจะเหมือนกับฉันบอกว่า Win32 เป็นเมนูเริ่มต้น คุณจะเห็นว่าคำพูดนั้นไร้สาระแค่ไหน


8
เพื่อชี้แจงคำชี้แจงดั้งเดิมของฉันไม่สามารถใช้ WinRT เพื่อสร้างแอปพลิเคชันเดสก์ท็อป "แบบดั้งเดิม" ได้ สำหรับเหตุผลที่อื่น ๆ ในกลุ่มมีตันเหตุผลที่จะเรียนรู้ WPF (WinForms ไม่มาก) หากไม่มีอะไรอื่นคุณจะได้เรียนรู้ WinRT อย่างมีประสิทธิภาพในเวลาเดียวกัน (ดังที่ฉันทราบในคำตอบของฉัน) นอกจากนี้เราไม่ได้อยู่ใกล้จุดที่แอป WinRT ซึ่งปกครองตลาด (โดยเฉพาะแอปสำหรับธุรกิจ) WPF ยังคงมีคุณค่ามหาศาล
BradleyDotNET

7
หาก WinRT ไม่ได้เชื่อมโยงกับการสร้างแอพแบบเต็มหน้าจอคุณช่วยบอกฉันได้ไหมว่าคุณจะใช้มันสร้างแอพที่มีหน้าต่างที่ทำงานบน Windows เวอร์ชันใดก็ได้ที่เปิดตัวจริง หรือจะใช้เขียนแอพที่ทำงานบนคอมพิวเตอร์ Windows มากกว่า 10% (เช่น Windows 7 และ XP) ได้อย่างไร? ฉันเดาว่านักพัฒนาส่วนใหญ่ต้องการกำหนดเป้าหมายผู้ใช้ Windows มากกว่า 10% จนกว่า Windows 8 หรือ 10 จะได้รับส่วนแบ่งการตลาดอย่างจริงจัง WPF ก็ยังคงมีความจำเป็นสำหรับแอปพลิเคชันจำนวนมาก WinRT อาจเป็นเลเยอร์รันไทม์ แต่นั่นไม่ได้เปลี่ยนความจริงที่ว่ามันไม่สามารถเข้าถึงหลาย ๆ สิ่ง (เต็ม) ที่ Win32 สามารถทำได้
John Colanduoni

1
@JohnColanduoni ตามที่เขากล่าวไว้สำหรับทุกคนที่เริ่มต้นในวันนี้ (มี.ค. 57) WinRT เป็นหนทางที่จะไป win10 เป็นและฟรีสำหรับการอัปเดตไม่กี่เดือนในขณะนี้และจะอีกไม่กี่เดือนใช่แล้ว win10 กำลังคว้า ส่วนแบ่งการตลาดขนาดใหญ่ ใช่ไม่ใช่ทุกคนที่ย้ายไป win10 แต่เมื่อสองสามวันก่อนเราพบว่าสนามบินในฝรั่งเศสยังคงใช้ win3.1
John Demetriou

3
@GavinWilliams เอาล่ะสถิติของคุณที่ทำให้ Windows 10 มีส่วนแบ่งการตลาดที่น่าชื่นชมในกลุ่มตลาดใดบ้าง คุณกำลังบอกว่าม็อดลบความคิดเห็นของคุณพร้อมลิงก์ไปยังแหล่งที่มาของคุณ แต่พวกเขาช่วยให้คุณใส่ความคิดเห็นนี้ได้หรือไม่? ฉันไม่ได้ซื้อมัน ผมเห็นด้วย XP จะไม่คุ้มค่าการสนับสนุน แต่วินโดวส์ 10 แอพพลิเคสากลไม่ได้สนับสนุน Windows 8.1 นับประสา Windows 7 การยอมรับคือไม่มีที่ไหนเลยที่จะต้องมีการปรับหน้าต่างสากลและมันจะชะลอตัว
John Colanduoni

3
@GavinWilliams เอาล่ะเรามาสนใจว่า 30% เป็นจำนวนมากน้อยกว่า 97% (การสนับสนุนที่คุณจะได้รับถ้าคุณใช้ WPF) และว่าข้อมูลนี้จะเป็นประโยชน์สำหรับการเขียนโปรแกรมวิดีโอเกม สำหรับวิดีโอเกมมันค่อนข้างง่ายที่จะกำหนดเป้าหมายทั้งสองอย่าง เว้นแต่คุณจะทำอะไรที่ไม่สำคัญจริงๆคุณจะต้องการใช้ DirectX / OpenGL ซึ่งหมายความว่าคุณต้องโฮสต์ไว้ในหน้าต่าง / เต็มหน้าจอ หากคุณไม่ต้องการใช้สิ่งเหล่านี้คุณจะต้องการ WPF จริงๆเนื่องจาก UI ของ WinRT ไม่อนุญาตให้วาดโหมดทันทีโดยไม่ต้องโฮสต์ DirectX / OpenGL (เช่นเดียวกับ WPF) แล้ว WinRT จะลดขนาดตลาดลง 70% ได้อย่างไร?
John Colanduoni

1

ฉันเจอคำถามนี้เมื่อหนึ่งปีก่อน ฉันได้ข้อสรุปว่า XAML, WPF หรือ WinRT เป็นสภาพแวดล้อมการพัฒนาที่ถูกต้องสำหรับการเริ่มต้น

ฉันขอแนะนำให้ใช้. Net Framework สำหรับชั้นข้อมูล (รวมถึง Web Services และ RESTful layer (JSON)) และ HTML5 / CSS3 และ Javascript ที่บริสุทธิ์สำหรับเลเยอร์การนำเสนอเว็บของคุณ

ภายใน Windows 10 คุณสามารถรวมเว็บแอปพลิเคชันใด ๆ เป็นแอปพลิเคชันรถไฟฟ้าใต้ดินได้ทันที

WinRT, XAML, WPF และ ms ที่คล้ายกันทำงานบน windows เท่านั้นและมีข้อ จำกัด มากมาย

หลังจากหนึ่งปีฉันก็ยังคงมีความสุขมากกับการตัดสินใจที่จะไม่ใช้ WinRT หรือ XAML สำหรับโปรเจ็กต์ใหม่ของฉัน


3
คุณกำลังพูดถึงอะไร? ใช่นั่นเป็นทางเลือกที่ดีหากคุณต้องการสร้างเว็บแอป หากคุณต้องการสร้างแอปบนเดสก์ท็อปก็ไม่ใช่ คุณสามารถใช้ Katana และมี WebApi ที่โฮสต์ในเครื่องและสร้างแอปเดสก์ท็อปซึ่งฉันเดาว่าจะทำให้คำตอบนี้มีความเกี่ยวข้องมากขึ้น
Casey

1
OP ถามเกี่ยวกับ Windows GUI และ WPF หรือ Winrt ไม่ใช่เว็บแอป
ezaspi

6
นอกจากนี้ฉันเองพบว่าเทคโนโลยีเหล่านี้ทำงานยากขึ้นมาก (ระบบเค้าโครงที่ไม่สามารถเข้าใจได้ไม่มีการตรวจสอบเวลาคอมไพล์ในโค้ด ฯลฯ ) เดสก์ท็อปยังไม่ตาย :)
BradleyDotNET

1
ฉันยอมรับ HTML เป็น UI สากลและควรมีไว้สำหรับเดสก์ท็อปด้วย ฉันรู้สึกว่าเราจำเป็นต้องทำให้กรอบงานที่แตกต่างกันเหล่านี้ง่ายขึ้นและหยุดการแนะนำมากขึ้นเรื่อย ๆ ส่วนใหญ่ไม่จำเป็น เพียงเรียนรู้ HTML และ ASP จากนั้นโฮสต์เว็บไซต์ของคุณด้วยตนเองในแอป WinForm แอป WinForm ประกอบด้วยเว็บเซิร์ฟเวอร์และการควบคุมเว็บเบราว์เซอร์ของคุณ ผลที่ได้คือคุณประหยัดเวลาคุณมุ่งเน้นไปที่การเรียนรู้ภาษาและเทคโนโลยีเดียวนักพัฒนาของคุณเร็วขึ้นคุณประหยัดเงินลูกค้าแอปของคุณเป็นหลักฐานในอนาคตและพกพาได้มากขึ้น
TheLegendaryCopyCoder
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.