wpf: comment afficher l'info-bulle lorsque le bouton est désactivé par commande?


162

J'essaie d'afficher une info-bulle quel que soit l'état des boutons, mais cela ne semble pas faire l'affaire:

<Button Command="{Binding Path=CommandExecuteAction}" 
        ToolTip="{Binding Path=Description}" ToolTipService.ShowOnDisabled="true"
        Style="{StaticResource toolbarButton}">
   <Image Source="{Binding Path=Icon}"></Image>
</Button>

Comment puis-je afficher l'info-bulle lorsque le bouton est désactivé en raison de command.CanExecute renvoie false?

Remarque:

ToolTipService.ShowOnDisabled = "true" fonctionne comme un charme. La raison pour laquelle cela n'a pas fonctionné dans mon exemple est que le style associé au bouton redéfinit le modèle de contrôle et a désactivé le test de positionnement sur le bouton lorsque le bouton était désactivé (IsHitTestVisible = false). La réactivation du test de positionnement dans le modèle de contrôle a fait apparaître l'info-bulle lorsque le bouton était désactivé.


duplication possible de WPF Tooltip Visibility
OJ.

J'utilise ToolTipService.ShowOnDisabled, mais cela ne fonctionne pas.
Marius

1
Supprimez simplement cette question. J'ai fait un petit projet de test et ToolTipService.ShowOnDisabled fonctionne très bien.
Marius

15
Je suis content que cette question n'ait pas été supprimée. Il a répondu rapidement et avec précision à une question / problème que j'avais, ce qui est la raison exacte pour laquelle je viens à SO en premier lieu. Merci d'être Lazy (tm) Marius. :-)
Jere.Jones

Excusez-moi, y a-t-il un moyen de le montrer uniquement lorsqu'il est désactivé?
advapi

Réponses:



26

C'est une bonne méthode à ajouter à votre code de démarrage

ToolTipService.ShowOnDisabledProperty.OverrideMetadata(
    typeof(Control),
    new FrameworkPropertyMetadata(true));

Pouvez-vous expliquer ce que cela fait? Dire que c'est une bonne méthode au démarrage n'explique pas.
Stealth Rabbi

Cela garantit que pour toute classe héritant de Control, des info-bulles sont affichées même si l'instance de Control est désactivée
sacha barber

3
Il est ironique que les utilisateurs aient le plus besoin de l'info-bulle lorsque le contrôle est désactivé, car ils veulent savoir pourquoi le contrôle est désactivé. Il s'agit d'un bon exemple d'une valeur par défaut dans WPF qui est incorrecte la grande majorité du temps. Cela vaut donc la peine de le changer.
Contango le

2

Rendre l'info-bulle visible pour TOUS les boutons et cases à cocher désactivés:

<Window.Resources>
    <Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}>
        <Setter Property="ToolTipService.ShowOnDisabled" Value="true"/>
    </Style>
    <Style TargetType="{x:Type CheckBox}" BasedOn="{StaticResource {x:Type CheckBox}}>
        <Setter Property="ToolTipService.ShowOnDisabled" Value="true"/>
    </Style>
</Window.Resources>

Le BasedOn=...empêche que vous perdiez tous les autres styles qui ont été appliqués à la case à cocher ou au bouton auparavant. Si vous n'utilisez aucun autre style pour le bouton ou la case à cocher, vous pouvez supprimer les BasedOn=..pièces

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.