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). Повторное включение проверки попадания в контрольной панели заставило всплывающую подсказку появиться, когда кнопка была отключена.

Marius
источник
возможная копия WPF Tooltip Visibility
OJ.
Я использую ToolTipService.ShowOnDisabled, но он не работает.
Мариус
1
Просто удалите этот вопрос. Я сделал небольшой тестовый проект и ToolTipService.ShowOnDisabled работает просто отлично.
Мариус
15
Я рад, что этот вопрос не был удален. Он быстро и точно ответил на вопрос / проблему, с которой я столкнулся, и именно поэтому я и пришел в SO. Спасибо за то, что ленивый (тм) Мариус. :-)
Jere.Jones
Извините, есть ли способ показать это только при отключении?
Advapi

Ответы:

305

ToolTipService.ShowOnDisabled = "True"

Кишоре Кумар
источник
10
Ссылка MSDN: msdn.microsoft.com/en-us/library/…
Дэвид
3
Это происходит в объявлении xaml для объекта, на котором появится всплывающая подсказка, то есть:<Button ToolTipService.ShowOnDisabled="True">...
gusmally поддерживает Monica
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=..части

Blechdose
источник