Contrôle personnalisé vs utilisateur

J’ai lu quelques explications sur la différence entre les contrôles utilisateur et personnalisés, par exemple: http://www.wpftutorial.net/CustomVsUserControl.html

Je veux créer, par exemple, une composition simple d’une grid de données avec 2 listes déroulantes chargées de modifier les valeurs des éléments de la grid de données. Je veux créer un contrôle spécifique pour cela car je vais l’utiliser souvent. Je voudrais implémenter la logique derrière et puis dans l’invocation de xaml je dois seulement spécifier les itemsSource.

Pour cet exemple, dois-je créer un contrôle utilisateur ou personnalisé? Étant donné que j’aurai des propriétés et une logique, devrais-je avoir un modèle de vue pour ce contrôle?

EDIT: Connaissez-vous des articles avec une séparation conceptuelle claire entre ces 2 options?

Le choix est non seulement entre le contrôle utilisateur et le contrôle personnalisé, mais également entre le contrôle utilisateur, le contrôle personnalisé, la personnalisation du modèle de contrôle, la personnalisation du modèle de données, le modèle d’en-tête (pour les contrôles basés sur les collections) et les propriétés associées. Reportez-vous à la présentation de Control Authoring

Je vais en suivant l’ordre de considération

  1. Propriétés attachées : Si la fonctionnalité peut être atteinte, j’utilise les propriétés jointes. Exemple, zone de texte numérique.

  2. Modèle de contrôle : Lorsque les exigences peuvent être satisfaites en personnalisant le modèle de contrôle, je l’utilise. Exemple, barre de progression circulaire.

  3. Contrôle personnalisé : si le modèle de contrôle ne peut pas le faire, j’utilise un contrôle personnalisé. Pourvu que je dois personnaliser / étendre le contrôle déjà présent. Exemple fournissant Tri, Filtrage basé sur la ligne d’en-tête dans GridView (GridView est présent dans les applications Metro, utilisé uniquement pour illustrer l’exemple)

  4. Contrôle utilisateur : le moins préféré. Seulement lorsque la composition est requirejse et que je ne peux pas le faire en utilisant un contrôle personnalisé. Comme dans votre exemple, 2 combobox et 1 datagrid. Les contrôles utilisateur ne fournissent pas de fonction transparente transparente pouvant être utilisée via un modèle de contrôle ou de contrôle personnalisé.

Vous avez déjà de bonnes réponses qui expliquent les différences mais comprennent également que les contrôles personnalisés et les UserControls ont des objectives différents:

Un UserControl encapsule généralement une sorte de comportement composite. Si vous avez une application qui doit modifier des détails de contact à plusieurs endroits, par exemple, vous pouvez créer un contrôle personnalisé comportant les étiquettes et les champs de texte pour toutes les données disposées avec un bouton Envoyer qui contient le code approprié et réutiliser ce contrôle. tout au long de votre demande.

Un contrôle personnalisé est un contrôle dérivé de l’une des classes de contrôle WPF (EG Control , ContentControl etc.) et doit être créé dans le code. Ces contrôles ont généralement un objective cohérent unique (pensez à TextBox , ComboBox , Label ) plutôt que d’agir ensemble (bien que cela ne soit pas nécessairement le cas).

UserControl est généralement plus facile pour les personnes non familiarisées avec WPF car elles peuvent être conçues visuellement.

Ma suggestion serait de commencer avec un UserControl . Vous pouvez toujours modifier cela en un contrôle personnalisé à une date ultérieure, à mesure que vous vous familiariserez avec le fonctionnement de WPF . La création de votre contrôle en tant que contrôle personnalisé nécessitera une connaissance de ControlTemplate et des Style car vous devrez fournir les vôtres pour définir l’apparence de votre contrôle.

En fin de compte, tant que le contrôle se comporte correctement, l’approche que vous utilisez n’a pas d’importance.

Voir cet article pour un exemple de deux approches au même problème. L’auteur de la publication souhaitait un contrôle capable de présenter du contenu modal devant le contenu principal. L’auteur du message a effectivement répondu à sa propre question en l’implémentant en tant que UserControl . J’ai ajouté une réponse à l’article qui crée le contrôle en tant que contrôle personnalisé, mais les deux ont le même effet final.

La meilleure explication est dans le msdn . CustomControl est plus un nom “virtuel”, il n’y a pas de classe appelée “CustomControl” dans WPF, mais plutôt une nouvelle construction de classes sur l’une des classes de contrôle WPF, comme Control , ItemsControl et des contrôles plus spécifiques comme TextBox ou Button .

Pour votre cas particulier, un UserControl devrait suffire, la création d’un CustomControl est quelque chose qui peut facilement être évité. Bien que ce ne soit pas une mauvaise chose, beaucoup de gens, en particulier les débutants de WPF venant de WinForms, ont tendance à sous-classer plus que nécessaire.

  • Si vous avez un modèle de vue et que vous souhaitez créer une vue, utilisez le contrôle utilisateur .

  • Si vous avez besoin d’un contrôle autonome sans modèle de vue spécifique,
    vous avez probablement besoin d’un contrôle personnalisé .

  • Si vous trouvez que la fonctionnalité dont vous avez besoin dans son ensemble existe déjà dans d’autres contrôles, vous devez remplacer un modèle de contrôle existant.
    (c.-à-d. pour un bouton en forme de losange – vous devez remplacer le modèle de contrôle de bouton.)

  • En ce qui concerne les propriétés attachées et les comportements attachés, ceux-ci sont utiles lorsque vous souhaitez étendre un contrôle avec plus de propriétés ou que vous souhaitez qu’il se comporte légèrement différemment de son comportement par défaut.

Dans le cas fourni de la composition décrite par l’OP, il peut être réalisé soit avec un contrôle utilisateur, soit avec un contrôle personnalisé. Je préférerais un contrôle personnalisé puisqu’il n’y a pas de modèle de vue spécifique fourni, “l’entrée” est uniquement une propriété liée à une collection d’éléments.

Oh, et je suis désolée d’être légèrement en retard.

Si c’est la première fois que vous construisez des contrôles, je vous recommande UserControl car VS vous permet de concevoir son interface plus facilement. Les commandes personnalisées sont plus puissantes, mais vous devez clairement distinguer la logique de votre contrôle de son interface, ce qui nécessite un peu plus de préparation.

(Désolé pour l’affichage en tant que réponse, ne peut pas commenter. Si vous trouvez cela utile, n’hésitez pas à append ceci en tant que commentaire à la réponse de Benjamin, par exemple?)

Vous pouvez facilement concevoir visuellement CustomControl . Créez un nouveau UserControl (ou Window). Créez visuellement sa structure xaml dans Designer. Copier-coller le corps du xaml résultant dans ControlTemplate de votre nouveau CustomControl (par exemple dans un fichier de thème générique).

Si je me souviens bien, vous pouvez également concevoir le modèle CustomControl directement, dans Blend.

Bien sûr, vous pouvez également insérer le composant CustomControl dans une fenêtre et placer la vue Designer de Windows en tant que nouveau panneau au-dessus de la vue xaml du contrôle dans VisualStudio. Certaines liaisons xaml à partir d’un modèle de style ne s’affichent pas dans Designer comme cela jusqu’à ce que je reconstruise.

[L’interface graphique d’Imho est principalement une question visuelle et ne doit pas être créée et n’a pas besoin d’être créée dans le code. ]

Eh bien, pour créer un contrôle personnalisé, vous devez l’implémenter en tant que contrôle utilisateur. Votre propre contrôle utilisateur s’appelle un contrôle personnalisé. C’est assez simple.

UserControl est la classe de base contenant votre contenu personnalisé:

  Your custom WPF content  

Je ne suis pas totalement d’accord avec l’article. Cependant, dans votre cas, vous avez besoin d’un UserControl que vous pouvez réutiliser dans votre interface utilisateur.

Vous pouvez toujours compter sur des descriptions auto-explicatives de style Microsoft:

Contrôle utilisateur (WPF) – Contrôle utilisateur Windows Presentation Foundation
Contrôle personnalisé (WPF) – Contrôle personnalisé Windows Presentation Foundation