Je voudrais créer un ensemble de contrôles personnalisés qui sont essentiellement des boutons d'image (c'est un peu plus complexe que cela, mais c'est l'effet sous-jacent que je vais faire) que j'ai vu quelques exemples différents pour. Cependant, je voudrais étendre cela pour permettre également les boutons radio/bascule. Ce que je voudrais faire est d'avoir une classe abstraite commune appelée ImageButtonBase qui a des implémentations par défaut pour ImageSource et Text, etc. Cela rend une implémentation régulière d'ImageButton assez facile.Bouton d'image personnalisée et bouton radio/bascule de la classe de base commune
Le problème que j'ai est de créer la saveur RadioButton de celui-ci. Comme je le vois, il y a au moins trois options:
- Il serait facile de créer quelque chose qui dérive de RadioButton, mais je ne peux pas utiliser la classe abstraite que j'ai créée.
- Je pourrais changer la classe abstraite à une interface, mais ensuite je perds les implémentations abstraites , et aura en fait une duplication de code.
- Je pourrais dériver de ma classe abstraite, et ré-implémenter les propriétés et événements de type RadioButton (IsChecked, GroupName, etc.), mais cela ne semble certainement pas une bonne idée.
Note: J'ai vu How to get a group of toggle buttons to act like radio buttons in WPF?, mais ce que je veux faire est un peu plus complexe. Je me demande simplement si quelqu'un a un exemple de mise en œuvre, ou quelque chose qui pourrait être adapté à ce genre de scénario. Je peux voir les avantages et les inconvénients de chacune des idées ci-dessus, mais chacun vient avec des pièges potentiels.
Merci, WTS
Pour moi, c'est confus, vous voulez créer un seul contrôle, qui peut être un bouton (associé à une commande?), Un bouton bascule (lié à un bool?) Ou un bouton radio (lié à un type intégral) ? Je ne pense pas qu'il existe une solution pour les obtenir tous sans introduire trop d'écarts de comportement et d'autres odeurs de code. Si c'est le cas, il vaut probablement mieux créer une classe distincte pour chaque objectif. Vous pouvez toujours les laisser étendre une interface-marqueur, si vous voulez leur donner des propriétés communes. –
Non, c'est plus que je veux plusieurs contrôles basés sur une seule classe abstraite. Le framework fait la même chose - il y a le contrôle ButtonBase, qui est hérité par les contrôles Button et ToggleButton. RadioButton dérive alors de ToggleButton. Je veux créer une classe abstraite dérivée de ButtonBase, avec mes propriétés supplémentaires. Mes classes de classe Button et RadioButton en dériveraient. La chose que j'essaie d'éviter, si possible, est de redéfinir toutes les propriétés et les événements de RadioButton que je recevrais «gratuitement». –