wpf: як показати підказку, коли кнопку відключено командою?


162

Я намагаюся показати підказку незалежно від стану кнопок, але це, здається, не робить фокус:

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

Як я можу показати підказку, коли кнопка відключена через command.CanExecute повернення false?

Примітка:

ToolTipService.ShowOnDisabled = "вірно" працює як шарм. Причиною цього не вдалося в моєму прикладі є те, що стиль, пов’язаний із кнопкою, переосмислює шаблон управління та вимикає тестування натискань на кнопку, коли кнопка була відключена (IsHitTestVisible = false). Повторне включення тестування натискань на шаблоні керування показало, що підказка з’являється, коли кнопку відключено.


можливий дублікат WPF Tooltip Visibility
OJ.

Я використовую ToolTipService.ShowOnDisabled, але він не працює.
Маріус

1
Просто видаліть це питання. Я зробив невеликий тестовий проект, і ToolTipService.ShowOnDisabled працює чудово.
Маріус

15
Я радий, що це питання не видалено. Він швидко та точно відповів на запитання / проблему, яка була у мене, і саме тому я в першу чергу прийшов до ТА. Дякуємо, що лінивий (тм) Маріус. :-)
Jere.Jones

Вибачте, чи є спосіб я показати це лише при відключенні?
Advapi

Відповіді:



26

Це хороший спосіб додати до стартового коду

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

Чи можете ви пояснити, що це робить? Сказати, що це гарний метод при запуску, не пояснює.
Стелс-рабин

Це гарантує, що для будь-якого класу, успадкованого від Control, підказки відображаються, навіть якщо екземпляр Control вимкнено
sacha

3
Іронічно, що користувачі мають найбільшу потребу в підказці, коли керування вимкнено, оскільки вони хочуть знати, чому управління вимкнено. Це хороший приклад дефолту у WPF, який є неправильною переважну частину часу. Тож варто це змінити.
Контанго

2

Зробіть підказку видимою для ВСІХ відключених кнопок і прапорців:

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

У BasedOn=...попереджаю , що ви втратите будь-які інші стилі , які були застосовані для установки прапорця або кнопки раніше. Якщо ви не використовуєте жодних інших стилів для кнопки або прапорця, ви можете видалити BasedOn=..деталі

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.