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 = "true" работает как шарм. Причина, по которой это не сработало в моем примере, заключается в том, что стиль, связанный с кнопкой, переопределяет шаблон элемента управления и отключил проверку нажатия кнопки, когда кнопка была отключена (IsHitTestVisible = false). Повторное включение проверки попадания в контрольной панели заставило всплывающую подсказку появиться, когда кнопка была отключена.


возможная копия WPF Tooltip Visibility
— OJ.

Я использую ToolTipService.ShowOnDisabled, но он не работает.
— Мариус

1
Просто удалите этот вопрос. Я сделал небольшой тестовый проект и ToolTipService.ShowOnDisabled работает просто отлично.
— Мариус

15
Я рад, что этот вопрос не был удален. Он быстро и точно ответил на вопрос / проблему, с которой я столкнулся, и именно поэтому я и пришел в SO. Спасибо за то, что ленивый (тм) Мариус. :-)
— Jere.Jones

Извините, есть ли способ показать это только при отключении?
— Advapi

Ответы:



26

Это хороший способ добавить в ваш код запуска

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

Можете ли вы объяснить, что это делает? Сказать, что это хороший метод при запуске, не объяснить.
— Раввин Стелс

Это гарантирует, что для любого класса, унаследованного от Control, показываются всплывающие подсказки, даже если экземпляр Control отключен
— sacha barber

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.