wpf: Wie wird ein Tooltip angezeigt, wenn die Schaltfläche per Befehl deaktiviert wird?

162

Ich versuche, einen Tooltip unabhängig von einem Schaltflächenstatus anzuzeigen, aber dies scheint nicht den Trick zu tun:

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

Wie kann ich den Tooltip anzeigen, wenn die Schaltfläche aufgrund des Befehls deaktiviert ist. CanExecute gibt false zurück?

Hinweis:

ToolTipService.ShowOnDisabled = "true" funktioniert wie ein Zauber. Der Grund, warum dies in meinem Beispiel nicht funktioniert hat, ist, dass der mit der Schaltfläche verknüpfte Stil die Steuerungsvorlage neu definiert und die Trefferprüfung für die Schaltfläche deaktiviert hat, als die Schaltfläche deaktiviert wurde (IsHitTestVisible = false). Durch erneutes Aktivieren des Treffertests in der Steuerungsvorlage wurde der Tooltip angezeigt, wenn die Schaltfläche deaktiviert wurde.

Marius
quelle
Mögliches Duplikat von WPF Tooltip Visibility
OJ.
Ich verwende den ToolTipService.ShowOnDisabled, aber er funktioniert nicht.
Marius
1
Löschen Sie einfach diese Frage. Ich habe ein kleines Testprojekt durchgeführt und ToolTipService.ShowOnDisabled funktioniert einwandfrei.
Marius
15
Ich bin froh, dass diese Frage nicht gelöscht wurde. Es beantwortete schnell und genau eine Frage / ein Problem, das ich hatte, was genau der Grund ist, warum ich überhaupt zu SO komme. Danke, dass du Lazy (tm) Marius bist. :-)
Jere.Jones
Entschuldigung, gibt es eine Möglichkeit, wie ich es nur zeigen kann, wenn es deaktiviert ist?
Advapi

Antworten:

304

ToolTipService.ShowOnDisabled = "True"

Kishore Kumar
quelle
10
MSDN-Referenz: msdn.microsoft.com/en-us/library/…
David
3
Dies geht in die xaml-Deklaration für das Objekt ein, auf dem der Tooltip <Button ToolTipService.ShowOnDisabled="True">...
angezeigt
26

Dies ist eine gute Methode, um Ihren Startcode zu ergänzen

ToolTipService.ShowOnDisabledProperty.OverrideMetadata(
    typeof(Control),
    new FrameworkPropertyMetadata(true));
Sacha Friseur
quelle
Können Sie erklären, was dies bewirkt? Zu sagen, dass es beim Start eine gute Methode ist, erklärt nicht.
Stealth Rabbi
Es stellt sicher, dass für jede Klasse, die von Control erbt, Tooltips angezeigt werden, auch wenn die Control-Instanz deaktiviert ist
Sacha Barber
3
Es ist ironisch, dass Benutzer den Tooltip am dringendsten benötigen, wenn das Steuerelement deaktiviert ist, da sie wissen möchten, warum das Steuerelement deaktiviert ist. Dies ist ein gutes Beispiel für einen Standard in WPF, der die meiste Zeit falsch ist. Es lohnt sich also, es zu ändern.
Contango
2

Tooltip für ALLE deaktivierten Schaltflächen und Kontrollkästchen sichtbar machen:

<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>

Die BasedOn=...verhindert , dass Sie alle anderen Arten verlieren , die vor dem Kontrollkästchen oder Taste angewendet wurden. Wenn Sie keine anderen Stile für Schaltflächen oder Kontrollkästchen verwenden, können Sie die BasedOn=..Teile entfernen

Blechdose
quelle