Apa perbedaan antara Perpustakaan Kontrol Pengguna dan Perpustakaan Kontrol Kustom?

168

Saya baru saja datang untuk mempercepat pada WPF dan ingin membuat kontrol WPF dapat digunakan kembali.

Ketika saya melihat opsi untuk membuat proyek di Visual Studio, saya melihat "Perpustakaan Kontrol Pengguna WPF" dan "Perpustakaan Kontrol Kustom WPF". Tidak jelas bagi saya apa perbedaan antara mereka dan pencarian Google saya belum menemukan penjelasan yang layak.

Saya ingin memahami perbedaan di antara mereka dan idealnya melihat beberapa contoh kapan harus menggunakan satu di atas yang lain.

17 dari 26
sumber
2
Jangan lupa konten bersarang atau mengubah templat kontrol sebagai opsi. Anda dapat membuat perubahan dramatis pada kontrol dengan cara ini tanpa harus menulis kontrol kustom.
MichaC
Apa yang dikatakan MichaC. Bagian terbaik dari WPF adalah bahwa templating kontrol yang ada dapat memiliki dampak yang sangat besar. Anda harus jarang meminta kontrol khusus. Ini tidak seperti WinForms di mana bahkan perubahan kecil pada kontrol memerlukan kontrol turunan baru.
Mikko Rantanen
Masih bermanfaat. Punya lencana emas lain.
ouflak

Jawaban:

117

Dalam praktiknya kontrol khusus adalah sesuatu yang Anda terapkan pada level kode sementara Anda dapat menggunakan XAML untuk kontrol pengguna. Kontrol kustom memperluas salah satu kelas basis kontrol WPF dan memberikan fungsionalitas tambahan melalui kode sehingga semua logika dan representasi tambahan harus diimplementasikan di dalam kode.

Kontrol pengguna secara teknis adalah kontrol konten normal yang dapat diperluas di beberapa bagian dalam kode, tetapi biasanya diperluas dengan menempatkan kontrol lain di dalamnya. Jadi seperti yang disebutkan Kent, UserControl adalah agregasi dari kontrol lain. Ini membatasi apa yang dapat Anda lakukan dengan kontrol pengguna secara signifikan. Lebih mudah digunakan tetapi lebih terbatas daripada kontrol kustom penuh.

Kontrol ini memiliki perbedaan kecil dari sudut pandang runtime. Saat membangun aplikasi dan menempatkan UserControl ke dalamnya, pohon kontrol akan memiliki template UserControl konkret di dalamnya. Jadi jika kita mempertimbangkan contoh lumpuh dari tombol khusus. Jika Anda menggunakan kontrol pengguna, Anda akan menambahkan tombol di dalam <UserControl>elemen. Saat menggunakan kontrol khusus, Anda akan mendapatkan kontrol itu sendiri dari tombol yang paling mungkin. Perbedaannya akan terlihat di pohon logis.

Sementara kontrol kustom akan menyediakan pohon logis yang mirip dengan

  • Jendela
    • Tombol Kustom

UserControl akan memberikan pohon logis

  • Jendela
    • CustomButtonUserControl
      • Tombol

Jadi pada akhirnya UserControl hanyalah ContentControl normal yang dapat Anda tambah sedikit dan Anda dapat menentukan sebelumnya kontennya. Kontrol kustom memberikan fleksibilitas yang lebih besar dengan harga kemudahan implementasi karena Anda harus melakukan semua logika dan interaksi dalam kode alih-alih mendapatkan manfaat XAML.

Meskipun setelah semua ini, saya tidak berpikir ada banyak perbedaan dalam template Visual Studio. Kemungkinan besar Kontrol Kustom Visual Studio hanya membuat proyek dengan kontrol kustom kosong sedangkan proyek Kontrol Pengguna adalah proyek dengan kontrol pengguna kosong. Anda nanti dapat menambahkan segala jenis barang ke proyek.

Memperbarui

Dan pendapat saya tentang kapan menggunakan kontrol kustom dan kontrol pengguna adalah bahwa jika Anda bisa menyelesaikan sesuatu dengan kontrol pengguna dan elemen kontrol tambahan di pohon logis tidak mengganggu Anda, gunakan kontrol pengguna karena jauh lebih mudah untuk dilakukan. buat dan pertahankan. Gunakan kontrol khusus hanya jika Anda memiliki alasan untuk tidak menggunakan kontrol pengguna.

Mikko Rantanen
sumber
2
Bisakah kontrol khusus digunakan untuk menggabungkan kontrol lain?
17 dari 26
Dan bagaimana dengan masalah skinnable / dapat dipahami?
17 dari 26
1
Tidak yakin apa yang Anda maksud dengan menggabungkan. Anda tidak dapat membuat Kontrol Kustom dengan menggabungkan kontrol lain. Namun Anda dapat berasal dari kontrol Panel seperti StackPanel, Grid atau Panel itu sendiri sehingga Anda dapat menerapkan wadah tata letak dengan kontrol kustom (Tidak yakin apakah Anda bisa melakukannya dengan Kontrol Pengguna).
Mikko Rantanen
Ya, tetapi jika Anda hanya ingin menggabungkan kontrol lain, itu mungkin akan jauh lebih mudah dilakukan dengan Kontrol Pengguna. Bergantung pada apa yang ingin Anda lakukan kontrol kustom bisa sangat sulit untuk ditulis, itulah sebabnya Anda akan memilih untuk menggunakan Kontrol Pengguna meskipun itu hanya menyediakan sebagian dari kemampuan.
MichaC
1
Kedua kontrol ini harus skinnable / mudah dipahami ketika diimplementasikan dengan cara yang benar. Sayangnya referensi WPF saya ada di kantor saat ini sehingga saya tidak dapat memeriksa detail implementasi.
Mikko Rantanen
23

A Controlmewakili beberapa perilaku yang skinnable (dapat dipahami), sedangkan a UserControlumumnya adalah agregasi tingkat tinggi dari Controls yang spesifik untuk suatu aplikasi.

Info lebih lanjut tersedia di sini .

Kent Boogaart
sumber
3
Itulah salah satu tautan yang saya temukan yang tidak menjelaskan dengan baik :). Saya kira satu hal yang saya lewatkan adalah apa arti skinnable / templates sebenarnya dan mengapa itu tidak dapat dilakukan dengan kontrol pengguna. Selain itu, kalimat terakhir dari posting terkait adalah "Secara umum & Sederhananya, kontrol khusus memiliki fleksibilitas dan usabilitas yang lebih baik daripada kontrol pengguna". Jika itu benar, lalu mengapa saya ingin membuat kontrol pengguna?
17 dari 26