wpf: jak wyświetlić podpowiedź, gdy przycisk jest wyłączony przez polecenie?

162

Próbuję wyświetlić podpowiedź niezależnie od stanu przycisków, ale to nie wydaje się działać:

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

Jak mogę wyświetlić podpowiedź, gdy przycisk jest wyłączony z powodu polecenia.CanExecute zwraca wartość false?

Uwaga:

ToolTipService.ShowOnDisabled = "true" działa jak urok. Przyczyną, dla której to nie zadziałało w moim przykładzie, jest to, że styl powiązany z przyciskiem zmienia definicję szablonu kontrolnego i wyłącza testowanie trafień na przycisku, gdy przycisk był wyłączony (IsHitTestVisible = false). Ponowne włączenie testowania trafień w szablonie kontrolnym sprawiło, że podpowiedź pojawiała się po wyłączeniu przycisku.

Marius
źródło
możliwy duplikat Widoczności podpowiedzi WPF
Dz.U.
Używam ToolTipService.ShowOnDisabled, ale nie działa.
Marius
1
Po prostu usuń to pytanie. Zrobiłem mały projekt testowy i ToolTipService.ShowOnDisabled działa dobrze.
Marius
15
Cieszę się, że to pytanie nie zostało usunięte. Szybko i dokładnie odpowiedział na pytanie / problem, który miałem, co jest dokładnym powodem, dla którego trafiłem do SO w pierwszej kolejności. Dzięki za bycie Lazy (tm) Marius. :-)
Jere.Jones
Przepraszam, czy jest sposób, żebym mógł to pokazać tylko wtedy, gdy jest wyłączony?
advapi

Odpowiedzi:

305

ToolTipService.ShowOnDisabled = "True"

Kishore Kumar
źródło
10
Numer referencyjny MSDN: msdn.microsoft.com/en-us/library/…
David
3
Dotyczy to deklaracji xaml dla obiektu, na którym pojawi się podpowiedź, czyli:<Button ToolTipService.ShowOnDisabled="True">...
gusmally obsługuje Monikę
26

To dobra metoda dodawania do kodu startowego

ToolTipService.ShowOnDisabledProperty.OverrideMetadata(
    typeof(Control),
    new FrameworkPropertyMetadata(true));
Sacha Barber
źródło
Czy możesz wyjaśnić, co to robi? Mówienie, że to dobra metoda na starcie, nie wyjaśnia.
Stealth Rabbi
Zapewnia, że ​​dla każdej klasy dziedziczącej po Control, podpowiedzi są wyświetlane, nawet jeśli instancja Control jest wyłączona
sacha barber
3
To ironia losu, że użytkownicy najbardziej potrzebują podpowiedzi, gdy kontrola jest wyłączona, ponieważ chcą wiedzieć, dlaczego ta kontrola jest wyłączona. To jest dobry przykład wartości domyślnej w WPF, która jest niepoprawna w większości przypadków. Dlatego warto to zmienić.
Contango
2

Pokaż podpowiedź dla WSZYSTKICH wyłączonych przycisków i pól wyboru:

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

W BasedOn=...zapobiega straci jakiekolwiek inne style, które zostały zastosowane do wyboru lub przycisku wcześniej. Jeśli nie używasz innych stylów dla przycisku lub pola wyboru, możesz usunąć BasedOn=..części

Blechdose
źródło