Je viens d'arriver sur WPF et j'aimerais créer un contrôle WPF réutilisable. Lorsque j'examine les options de création de projets dans Visual Studio, je vois "Bibliothèque de contrôle utilisateur WPF" et "Bibliothèque de contrôle personnalisée WPF". Je ne sais pas quelle est la différence entre eux et mes recherches Google n'ont pas donné d'explications décentes. Je voudrais comprendre les différences entre eux et idéalement voir quelques exemples de quand utiliser l'un sur l'autre.Quelle est la différence entre une bibliothèque de contrôle utilisateur et une bibliothèque de contrôle personnalisée?
Répondre
En pratique, les contrôles personnalisés sont quelque chose que vous implémentez au niveau du code alors que vous pouvez utiliser XAML pour les contrôles utilisateur. Les contrôles personnalisés étendent l'une des classes de base de contrôle WPF et fournissent des fonctionnalités supplémentaires via le code, de sorte que toute la logique et la représentation ajoutées doivent être implémentées dans le code.
Un contrôle utilisateur est techniquement un contrôle de contenu normal que vous pouvez étendre dans certaines parties du code, mais généralement il est étendu en plaçant d'autres contrôles à l'intérieur. Donc, comme Kent a mentionné un UserControl est une agrégation d'autres contrôles. Cela limite considérablement ce que vous pouvez faire avec un contrôle utilisateur. C'est plus facile à utiliser mais plus limité qu'un contrôle personnalisé complet.
Ces contrôles ont une petite différence du point de vue de l'exécution. Lors de la création d'une application et de l'insertion d'un UserControl, l'arborescence de contrôle contient un modèle UserControl concret. Donc, si nous considérons un exemple boiteux d'un bouton spécialisé. Si vous utilisiez un contrôle utilisateur, vous ajouteriez un bouton à l'intérieur de l'élément <UserControl>
. Lorsque vous utilisez un contrôle personnalisé, vous dériveriez probablement le contrôle lui-même d'un bouton. La différence serait visible dans l'arbre logique.
Alors que le contrôle personnalisé fournirait un arbre logique semblable à
- fenêtre
- CustomButton
Le UserControl donnerait un arbre logique de
- fenêtre
- CustomButtonUserControl
- Bouton
- CustomButtonUserControl
Donc à la fin UserControl est juste une ContentControl normale que vous pouvez prolonger un peu et pour lequel vous pouvez prédéfinir le contenu. Le contrôle personnalisé offre une plus grande flexibilité au prix de la facilité d'implémentation car vous devez faire toute la logique et l'interaction dans le code au lieu d'avoir l'avantage de XAML.
Après tout cela, je ne pense pas qu'il y ait autant de différence dans les modèles Visual Studio. Il est très probable que Visual Studio Custom Control crée un projet avec un contrôle personnalisé vide alors que le projet User Control est un projet avec un contrôle utilisateur vide. Vous pouvez ensuite ajouter n'importe quel type d'élément au projet.
Mise à jour
Et mon avis sur le moment d'utiliser le contrôle personnalisé et le contrôle de l'utilisateur est que si vous pouvez faire quelque chose avec un contrôle utilisateur et l'élément de commande supplémentaire dans l'arborescence logique ne vous dérange pas, utiliser un contrôle utilisateur car ils sont tellement plus faciles à créer et à maintenir. Utilisez un contrôle personnalisé uniquement si vous avez une raison de ne pas utiliser un contrôle utilisateur.
Un contrôle personnalisé peut-il être utilisé pour agréger d'autres contrôles? –
Et qu'en est-il du problème skinnable/templatable? –
Vous ne savez pas exactement ce que vous entendez par agrégation. Vous ne pouvez pas créer un contrôle personnalisé en agrégeant d'autres contrôles. Vous pouvez toutefois dériver d'un contrôle Panel tel que StackPanel, Grid ou Panel lui-même afin de pouvoir implémenter un conteneur de disposition avec un contrôle personnalisé (Vous ne savez pas si vous pouvez le faire avec un contrôle utilisateur). –
A Control
représente un comportement qui est skinnable (templatable), tandis qu'un UserControl
est généralement une agrégation de niveau supérieur de Control
s qui est spécifique à une application.
Plus d'infos disponibles here.
C'est l'un des liens que j'ai trouvé qui n'expliquait pas très bien les choses :). Je pense qu'une chose qui me manque est ce que skinnable/templatable signifie vraiment et pourquoi cela ne peut pas être fait avec un contrôle utilisateur. En outre, la dernière phrase de l'article lié est "Généralement et en termes simples, les contrôles personnalisés ont une meilleure flexibilité et réutilisabilité que les contrôles utilisateur". Si c'est vrai, alors pourquoi voudrais-je jamais créer un contrôle utilisateur? –
- 1. Quelle est la différence entre une application de service WCF et une bibliothèque de service WCF?
- 2. Quelle est la différence entre propriétaire et utilisateur (WindowsIdentity)?
- 3. Quelle est la différence entre la modification d'un contrôle en modifiant le modèle de contrôle et l'ajout de sous-contrôles?
- 4. Quelle est la différence entre HttpHandler et un contrôle d'utilisateur Web et quand utiliser chacun d'eux?
- 5. Quelle est la différence entre une propriété de dépendance et une propriété jointe dans WPF?
- 6. Quelle est la différence entre le contrôle de lien hypertexte et le contrôle de lien dans ASP.NET?
- 7. Quelle est la différence entre le contrôle de flux DTR/DSR et RTS/CTS?
- 8. Quelle est la différence entre un fichier objet .o et un fichier bibliothèque .so?
- 9. Quelle est la différence entre dict() et {}?
- 10. Images dans une bibliothèque de contrôle personnalisé WPF
- 11. Quelle est la différence entre le format OMF et COFF?
- 12. quelle est la différence entre:.! et: r !?
- 13. Quelle est la différence entre = et: =
- 14. Différence entre le modèle de contrôle et DataTemplate dans WPF
- 15. Bibliothèque de points de contrôle pour C#
- 16. Bibliothèque de contrôle/page ASP.NET Question
- 17. Quelle est la meilleure façon de créer une bibliothèque client pour une API de service Web?
- 18. Quelle est la différence entre une analyse de table et une analyse d'index clusterisée?
- 19. quelle est la différence entre une procédure stockée et une fonction de valeur table?
- 20. Quelle est la meilleure bibliothèque pour gérer une wiimote?
- 21. Quelle est la différence entre une table en mémoire, une table temporaire et une table pivotante?
- 22. Quelle est la différence entre IContainer et IUnityContainer de Prism?
- 23. Quelle est la différence entre this.click() et $ (this) .click()?
- 24. Quelle est la différence entre une classe abstraite et une mixine?
- 25. Quelle est la différence entre une nouvelle Action() et une lambda?
- 26. Quelle est la différence entre une application Web iPhone et une application iPhone?
- 27. Quelle est la différence entre une formule partagée et une formule matricielle?
- 28. Dans .NET, Quelle est la différence entre une ressource intégrée et une ressource?
- 29. En C#, quelle est la différence entre un destructeur et une méthode Finalize dans une classe?
- 30. Quelle est la meilleure bibliothèque Java OXM?
N'oubliez pas d'imbriquer du contenu ou de modifier le modèle d'un contrôle en tant qu'options. Vous pouvez faire des changements assez spectaculaires à un contrôle de cette façon sans avoir à écrire un contrôle personnalisé. – MichaC
Juste ce que MichaC a dit. La meilleure partie de WPF est que la modélisation des contrôles existants peut avoir un impact énorme. Vous devriez exiger des contrôles personnalisés rarement. Cela ne ressemble pas à WinForms où même des changements mineurs à un contrôle nécessitaient un nouveau contrôle dérivé. –
Encore utile. Avoir un autre badge d'or. – ouflak