อะไรคือความแตกต่างระหว่างห้องสมุดควบคุมผู้ใช้กับห้องสมุดควบคุมที่กำหนดเอง?


168

ฉันเพิ่งมาถึงความเร็วใน WPF และต้องการสร้างการควบคุม WPF นำมาใช้ใหม่

เมื่อฉันดูตัวเลือกสำหรับการสร้างโครงการใน Visual Studio ฉันเห็น "WPF User Control Library" และ "WPF Custom Control Library" มันไม่ชัดเจนสำหรับฉันว่าความแตกต่างระหว่างพวกเขากับการค้นหาโดย Google ของฉันยังไม่ปรากฏคำอธิบายที่เหมาะสม

ฉันต้องการที่จะเข้าใจความแตกต่างระหว่างพวกเขาและเห็นตัวอย่างบางส่วนของเวลาที่จะใช้อย่างใดอย่างหนึ่งมากกว่าที่อื่น


2
อย่าลืมซ่อนเนื้อหาหรือเปลี่ยนแม่แบบของตัวควบคุมเป็นตัวเลือก คุณสามารถเปลี่ยนแปลงตัวควบคุมได้อย่างน่าทึ่งโดยไม่ต้องเขียนตัวควบคุมแบบกำหนดเอง
MichaC

สิ่งที่ MichaC พูด ส่วนที่ดีที่สุดของ WPF คือการควบคุมอุณหภูมิที่มีอยู่สามารถมีผลกระทบอย่างมาก คุณควรต้องการการควบคุมที่กำหนดเองไม่ค่อย สิ่งนี้แตกต่างจาก WinForms ที่แม้แต่การเปลี่ยนแปลงเล็กน้อยในการควบคุมก็จำเป็นต้องมีการควบคุมใหม่
Mikko Rantanen

ยังมีประโยชน์ มีป้ายทองคำอีกอัน
ouflak

คำตอบ:


117

ในทางปฏิบัติการควบคุมแบบกำหนดเองเป็นสิ่งที่คุณใช้กับระดับรหัสในขณะที่คุณสามารถใช้ XAML สำหรับการควบคุมผู้ใช้ คอนโทรลแบบกำหนดเองขยายคลาสฐานการควบคุม WPF หนึ่งคลาสและจัดเตรียมฟังก์ชันเพิ่มเติมผ่านโค้ดดังนั้นตรรกะและการแทนค่าที่เพิ่มทั้งหมดต้องถูกนำมาใช้ภายในโค้ด

การควบคุมผู้ใช้เป็นเทคนิคการควบคุมเนื้อหาปกติซึ่งคุณสามารถขยายในบางส่วนในรหัส แต่โดยปกติจะขยายโดยการวางการควบคุมอื่น ๆ ภายใน ดังนั้นอย่างที่เคนท์กล่าวถึง UserControl เป็นการรวมตัวควบคุมอื่น ๆ นี่เป็นการ จำกัด สิ่งที่คุณสามารถทำได้กับการควบคุมผู้ใช้อย่างมาก ใช้งานง่ายกว่า แต่มีข้อ จำกัด มากกว่าการควบคุมแบบกำหนดเองเต็มรูปแบบ

ตัวควบคุมเหล่านี้มีความแตกต่างเล็กน้อยจากมุมมองรันไทม์ เมื่อสร้างแอปพลิเคชันและวาง UserControl ลงในแผนผังควบคุมจะมีเทมเพลต UserControl ที่เป็นรูปธรรมอยู่ด้านใน ดังนั้นถ้าเราพิจารณาตัวอย่างที่อ่อนแอของปุ่มพิเศษ หากคุณใช้การควบคุมผู้ใช้คุณจะต้องเพิ่มปุ่มภายใน<UserControl>องค์ประกอบ เมื่อใช้การควบคุมที่กำหนดเองคุณจะได้รับการควบคุมตัวเองจากปุ่มส่วนใหญ่ ความแตกต่างจะสามารถมองเห็นได้ในต้นไม้ตรรกะ

ในขณะที่การควบคุมที่กำหนดเองจะให้ต้นไม้ตรรกะคล้ายกับ

  • หน้าต่าง
    • CustomButton

UserControl จะให้ต้นไม้ตรรกะของ

  • หน้าต่าง
    • CustomButtonUserControl
      • ปุ่ม

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

ถึงแม้ว่าทั้งหมดนี้ฉันไม่คิดว่ามีความแตกต่างกันมากในเทมเพลต Visual Studio ส่วนใหญ่แล้ว Visual Studio Custom Control เพิ่งสร้างโครงการที่มีการควบคุมแบบกำหนดเองที่ว่างเปล่าในขณะที่โครงการการควบคุมผู้ใช้เป็นโครงการที่มีการควบคุมผู้ใช้ที่ว่างเปล่า คุณสามารถเพิ่มรายการประเภทใดก็ได้ในโครงการในภายหลัง

ปรับปรุง

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


2
สามารถใช้การควบคุมแบบกำหนดเองเพื่อรวมการควบคุมอื่น ๆ ได้หรือไม่
17 ของ 26

และปัญหาเกี่ยวกับ skinnable / templatable คืออะไร
17 ของ 26

1
ไม่แน่ใจว่าคุณหมายถึงอะไรโดยรวม คุณไม่สามารถสร้างการควบคุมที่กำหนดเองโดยการรวมการควบคุมอื่น ๆ อย่างไรก็ตามคุณสามารถสืบทอดมาจากคอนโทรลพาเนลเช่น StackPanel, Grid หรือ Panel เองเพื่อให้คุณสามารถใช้คอนเทนเนอร์โครงร่างด้วยตัวควบคุมที่กำหนดเอง (ไม่แน่ใจว่าคุณสามารถทำได้ด้วยการควบคุมผู้ใช้)
Mikko Rantanen

ใช่ แต่ถ้าคุณต้องการรวมการควบคุมอื่น ๆ มันอาจจะง่ายกว่าที่คุณจะใช้ User Control ขึ้นอยู่กับสิ่งที่คุณต้องการทำคอนโทรลแบบกำหนดเองนั้นยากที่จะเขียนซึ่งเป็นเหตุผลว่าทำไมคุณถึงเลือกใช้ User Control แม้ว่ามันจะให้ความสามารถเพียงบางส่วนเท่านั้น
MichaC

1
ตัวควบคุมทั้งสองนี้ควรเป็น skinnable / templatable เมื่อใช้วิธีที่ถูกต้อง น่าเสียดายที่การอ้างอิง WPF ของฉันอยู่ที่สำนักงานในขณะนี้ดังนั้นฉันไม่สามารถตรวจสอบรายละเอียดการใช้งานได้
Mikko Rantanen

23

A Controlแสดงถึงพฤติกรรมบางอย่างที่เป็น skinnable (templatable) ในขณะที่ a UserControlเป็นการรวมกันในระดับที่สูงกว่าของControls ที่เฉพาะเจาะจงกับแอปพลิเคชัน

สามารถดูข้อมูลเพิ่มเติมได้ที่นี่


3
นั่นเป็นหนึ่งในลิงค์ที่ฉันพบว่าไม่ได้อธิบายอะไรได้ดี :) ฉันเดาว่าสิ่งหนึ่งที่ฉันขาดไปคือความหมายของ skinnable / templatable จริงๆและทำไมมันไม่สามารถทำได้ด้วยการควบคุมของผู้ใช้ นอกจากนี้ประโยคสุดท้ายของโพสต์ที่เชื่อมโยงคือ "โดยทั่วไป & เพียงแค่พูดการควบคุมที่กำหนดเองมีความยืดหยุ่นและนำกลับมาใช้ที่ดีกว่าการควบคุมผู้ใช้" ถ้านั่นเป็นเรื่องจริงทำไมฉันถึงต้องการสร้างการควบคุมผู้ใช้?
17 ของ 26
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.