2009-11-30 3 views
0

Je construis un SplitButton personnalisé qui se compose de deux boutons qui se chevauchent, et pop-up - comme celui-ci (l'image montre une SplitButton générique):WPF: Comment rendre le bouton (splitbutton) activé quand sa commande liée ne peut pas s'exécuter?

SplitButton http://windowsclient.net/wf/blogs/jfoscoding/splitbutton.PNG

Mon SplitButton ouvre pop-up Whan un côté droit avec flèche est cliqué, et exécute SplitButton.Command quand un bouton principal est cliqué.

Dans mon cas, cependant parfois l'action par défaut ne peut pas s'exécuter, et dans ces cas, quand un bouton principal est cliqué, je voudrais ouvrir le popup à la place.

Je l'ai accompli, mais le problème est le suivant:

  • le SplitButton est sous-classé de ToggleButton
  • dans un ControlTemplate, j'ai un ToggleButton (celui du bas), et le bouton (plus court, superposé sur le dessus)
  • Button.Command="{TemplateBinding Command}" (je peux faire <SplitButton Command="{Binding MyDefaultAction}">...)
  • problème: lorsqu'une commande ne peut pas exécuter, l'ensemble SplitButton obtient désactivé.

Je voudrais garder avoir la même commande, mais passer outre le comportement du bouton de sorte qu'il ne devienne pas désactivé lorsque retourne Command.CanExecute() faux. Comment puis-je faire ceci?

Merci!

Répondre

0

La commande est une propriété de dépendance et je suis à peu près certaine qu'elle est héritée par n'importe quel contrôle situé en dessous dans l'arborescence visuelle. Donc, pour le bouton que vous ne voulez pas désactivé, définissez la propriété de commande sur une commande différente ou définissez-la sur null peut également fonctionner.

Alternativement,

Créer votre propre propriété de dépendance ... comme celui-ci

Dependency Propert

+0

Eh bien, le problème est que je veux encore le bouton pour exécuter une commande donnée, je ne ne » Je veux qu'il devienne désactivé lorsque la commande ne peut pas être exécutée. Cependant, j'ai regardé l'implémentation dans ButtonBase (avec Reflector), et la désactivation du bouton est faite par des méthodes privées - donc je ne peux pas les contourner. Je vais probablement devoir retirer la fonctionnalité nécessaire de la vue de démontage de Reflector, et créer un DP d'ICommand qui sera sous mon contrôle. Merci pour l'idée. –

Questions connexes