Kullanıcı Kontrol Kütüphanesi ile Özel Kontrol Kütüphanesi arasındaki fark nedir?


168

Ben sadece WPF hızlandırmak için geliyor ve yeniden kullanılabilir bir WPF kontrolü oluşturmak istiyorum.

Visual Studio'da proje oluşturma seçeneklerine baktığımda, "WPF Kullanıcı Denetim Kütüphanesi" ve "WPF Özel Denetim Kütüphanesi" ni görüyorum. Aralarındaki farkın ne olduğu belli değil ve Google aramalarım herhangi bir iyi açıklama getirmedi.

Aralarındaki farkları anlamak ve ideal olarak birinin ne zaman diğerinin üzerinde kullanılacağına dair bazı örnekler görmek istiyorum.


2
İçeriği yerleştirmeyi veya bir denetimin şablonunu seçenekler olarak değiştirmeyi unutmayın. Özel bir denetim yazmak zorunda kalmadan bir denetimde bu şekilde oldukça dramatik değişiklikler yapabilirsiniz.
MichaC

Tam MichaC'nin dediği gibi. WPF'nin en iyi yanı, mevcut kontrollerin değiştirilmesinin büyük bir etkisi olabileceğidir. Nadiren özel kontrollere ihtiyacınız vardır. Bu, bir denetimdeki küçük değişikliklerin bile yeni türetilmiş bir denetim gerektirdiği WinForms'dan farklıdır.
Mikko Rantanen

Yine de faydalı. Bir altın rozet daha al.
ouflak

Yanıtlar:


117

Uygulamada özel kontroller, kod düzeyinde uyguladığınız bir şeyken, kullanıcı kontrolleri için XAML'yi kullanabilirsiniz. Özel denetimler WPF denetim tabanı sınıflarından birini genişletir ve kod aracılığıyla ek işlevsellik sağlar, böylece eklenen tüm mantık ve gösterim kodun içinde uygulanmalıdır.

Kullanıcı kontrolü teknik olarak kodun bazı kısımlarında genişletebileceğiniz normal bir içerik kontrolüdür, ancak genellikle diğer kontrolleri içine yerleştirerek genişletilir. Yani Kent'in de belirttiği gibi, UserControl diğer kontrollerin toplamıdır. Bu, bir kullanıcı kontrolü ile yapabileceklerinizi önemli ölçüde sınırlar. Kullanımı daha kolaydır, ancak tam bir özel kontrolden daha sınırlıdır.

Bu denetimlerin çalışma zamanı açısından küçük bir farkı vardır. Bir uygulama oluşturup içine bir UserControl yerleştirirken, kontrol ağacının içinde somut bir UserControl şablonu olacaktır. Yani özel bir düğmenin topal bir örneğini düşünürsek. Bir kullanıcı denetimi kullanıyorsanız <UserControl>öğenin içine bir düğme eklersiniz . Özel bir denetim kullanırken, denetimin kendisini büyük olasılıkla bir düğmeden türetmeniz gerekir. Fark, mantıksal ağaçta görülebilir.

Özel kontrol benzer bir mantıksal ağaç sağlarken

  • pencere
    • CustomButton

UserControl şu mantıksal bir ağaç verir:

  • pencere
    • CustomButtonUserControl
      • Buton

Sonuçta UserControl sadece biraz genişletebileceğiniz ve içeriği önceden tanımlayabileceğiniz normal bir ContentControl. XAML'den yararlanmak yerine koddaki tüm mantığı ve etkileşimi yapmak zorunda olduğunuz için özel kontrol, uygulama kolaylığı pahasına daha fazla esneklik sağlar.

Tüm bunlardan sonra, Visual Studio şablonlarında çok fazla fark olduğunu düşünmüyorum. Büyük olasılıkla Visual Studio Özel Denetimi yalnızca boş bir özel denetime sahip bir proje oluştururken, Kullanıcı Denetimi projesi boş bir kullanıcı denetimine sahip bir projedir. Daha sonra projeye her türlü öğeyi ekleyebilirsiniz.

Güncelleme

Özel kontrol ve kullanıcı kontrolünü ne zaman kullanacağım hakkındaki düşüncem, bir kullanıcı kontrolü ile bir şey yapabiliyorsanız ve mantıksal ağaçtaki ekstra kontrol öğesi sizi rahatsız etmiyorsa, kullanıcı kontrolünü çok daha kolay olduğu için yarat ve sürdür. Özel denetimi yalnızca kullanıcı denetimini kullanmama nedeniniz varsa kullanın.


2
Özel kontroller, diğer kontrolleri birleştirmek için kullanılabilir mi?
17 of 26

Peki ya kaplanabilir / mizaçlı sorun ne olacak?
17 of 26

1
Toplayarak ne demek istediğinizden emin değilim. Diğer denetimleri toplayarak Özel Denetim oluşturamazsınız. Bununla birlikte, StackPanel, Grid veya Panel'in kendisi gibi bir Panel kontrolünden türetebilirsiniz, böylece özel kontrole sahip bir düzen konteyneri uygulayabilirsiniz (Bunu bir Kullanıcı Kontrolü ile yapıp yapamayacağınızdan emin değilsiniz).
Mikko Rantanen

Evet, ancak yalnızca diğer denetimleri bir araya getirmek istiyorsanız, bir Kullanıcı Denetimi ile yapmak çok daha kolay olacaktır. Ne yapmak istediğinize bağlı olarak, özel bir denetim yazmak gerçekten zor olabilir, bu nedenle, yalnızca yeteneklerin bir alt kümesini sağlasa da bir Kullanıcı Denetimi kullanmayı tercih edersiniz.
MichaC

1
Doğru şekilde uygulandığında bu kontrollerin her ikisi de kaplanabilir / geçici olabilir. Maalesef WPF referansım şu anda ofiste, bu yüzden uygulama ayrıntılarını kontrol edemiyorum.
Mikko Rantanen

23

A Control, kaplanabilir (temperlenebilir) bazı davranışları temsil ederken, a UserControlgenellikle Controlbir uygulamaya özgü s'nin daha yüksek düzeyde bir kümesidir .

Daha fazla bilgi burada .


3
Bu şeyleri çok iyi açıklamamış bulduğum bağlantılardan biri :). Sanırım eksik olduğum bir şey, skinnable / templatable'ın gerçekten anlamı ve neden bir kullanıcı kontrolü ile yapılamadığı. Ayrıca, bağlantılı yazının son cümlesi "Genel olarak & Basitçe konuşursak, özel kontroller kullanıcı kontrollerinden daha iyi esnekliğe ve tekrar kullanılabilirliğe sahiptir". Bu doğruysa, neden bir kullanıcı denetimi oluşturmak isteyeyim?
17 of 26
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.