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.



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:



26

To dobra metoda dodawania do kodu startowego

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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.