Comment bien hériter d'un contrôle utilisateur défini dans le code XAML de Silverlight
Si j'ai un usercontrol (en Silverlight) que j'ai écrit, qui utilise le code XAML pour définir l'apparence, comment puis-je faire une version spéciale de celui-ci?
c'est à dire que j'ai MyControl.xaml & MyControl.xaml.cs
Que dois-je faire si je veux un "SpecialisedControl" enfant de la classe? Je suppose que je viens de faire un nouveau fichier de code, alors hériter de MyControl. Mais que faire si je veux modifier l'apparence de la classe de base - alors que dois-je faire?
- Il pourrait être sage de dire quelque chose à propos de Silverlight dans le corps de votre question. J'ai juste tapé un énorme réaction à cela, en supposant que vous parliez de WPF, et alors réalisé que vous posiez des questions sur Silverlight, et que je n'ai aucune connaissance de la façon dont beaucoup de croisement il y a entre les deux.
- En termes de XAML / UserControls beaucoup. Postez votre réponse de toute façon, il pourrait aider 🙂
Vous devez vous connecter pour publier un commentaire.
J'ai écrit cette pensée que vous parliez de WPF, plutôt que de Silverlight, mais il peut y avoir assez de chevauchement pour que cela soit utile, donc je vais l'afficher, de toute façon.
Si par "modification de l'aspect de la classe de base" tu veux dire "un nouveau modèle", puis ce que vous avez besoin est probablement un CustomControl, pas un UserControl.
La meilleure façon d'y parvenir est de suivre l'exemple de Microsoft a d'autres contrôles, tels que le Bouton ou la zone de liste:
C'est certainement beaucoup plus de travail que de simplement dérivée de UserControl, mais si vous voulez être en mesure de totalement re-contrôles de modèle, comme vous pouvez le faire avec les contrôles intégrés, c'est la façon de le faire.
D'autre part, si tout ce que vous voulez faire est de fournir une certaine quantité limitée de personnalisation, telles que la modification de l'arrière-plan, ou en l'associant à une Commande avec une action de l'utilisateur, alors la meilleure chose à faire est d'exposer DependencyProperties, qui peut ensuite être mis dans des styles pour votre contrôle, ou sur les instances de votre commande, à lui-même.
Dans le cas que vous avez mentionné de vouloir personnaliser le look dans un hérité de contrôle, le processus est assez similaire: il suffit d'ajouter un style par défaut pour le nouveau contrôle avec un nouveau modèle; si vous avez besoin d'ajouter plus de gestionnaires d'événements, juste être absolument certain que vous appelez de base.OnApplyTemplate().
Je sais pas, j'aime faire des choses avec de simples objets. Voici un article qui décrit un moyen facile de glisser une XAML conçu de contrôle à l'extérieur de votre hiérarchie d'héritage, de sorte que vous pouvez personnaliser l'apparence et le comportement à l'aide de SimpleThingsLikeInheritance plutôt que MicrosoftStuffThatAlmostWorks
http://gen5.info/q/2009/02/10/subverting-xaml-how-to-inherit-from-silverlight-user-controls/
Comme Mihnea du lien décrit, la solution la plus simple est de simplement ajouter un espace de noms dans votre XAML:
C#
XAML
Vous pouvez résoudre ce problème en utilisant un wrapper comme décrit dans le lien ci-dessus.
Mais vous pouvez également utiliser le modèle de stratégie pour résoudre ce problème.
Dans ce post, je vais expliquer comment vous mettre en œuvre ces deux méthodes.
http://www.lab101.be/2008/07/silverlight-usercontrol-inheritance/