wpf: como mostrar a dica de ferramenta quando o botão é desativado por comando?

162

Estou tentando mostrar uma dica de ferramenta, independentemente do estado dos botões, mas isso não parece fazer o truque:

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

Como posso mostrar a dica de ferramenta quando o botão está desabilitado devido ao comando.CanExecute retornando false?

Nota:

ToolTipService.ShowOnDisabled = "true" funciona como um encanto. A razão pela qual isso não funcionou no meu exemplo é porque o estilo associado ao botão redefine o modelo de controle e desativou o teste de acerto no botão quando o botão foi desativado (IsHitTestVisible = false). A reativação do teste de acerto no modelo de controle fez a dica de ferramenta aparecer quando o botão foi desativado.

Marius
fonte
possível duplicação da WPF Tooltip Visibility
JO.
Estou usando o ToolTipService.ShowOnDisabled, mas não está funcionando.
Marius
1
Apenas exclua esta pergunta. Fiz um pequeno projeto de teste e o ToolTipService.ShowOnDisabled funciona muito bem.
Marius
15
Fico feliz que esta pergunta não tenha sido excluída. Ele respondeu com rapidez e precisão a uma pergunta / problema que eu tinha, e é exatamente por isso que cheguei à SO. Obrigado por ser Lazius (tm) Marius. :-)
Jere.Jones
Com licença, existe uma maneira de mostrar isso apenas quando desativado?
Advapi

Respostas:

305

ToolTipService.ShowOnDisabled = "True"

Kishore Kumar
fonte
10
Referência do MSDN: msdn.microsoft.com/en-us/library/…
David
3
Isso está na declaração xaml do objeto no qual a dica de ferramenta aparecerá, ou seja:<Button ToolTipService.ShowOnDisabled="True">...
suporta gusmally Monica
26

Este é um bom método para adicionar ao seu código de inicialização

ToolTipService.ShowOnDisabledProperty.OverrideMetadata(
    typeof(Control),
    new FrameworkPropertyMetadata(true));
sacha barbeiro
fonte
Você pode explicar o que isso faz? Dizer que é um bom método na inicialização não explica.
Rabino furtivo
Ele garante que para qualquer classe herdada de controle, as dicas são mostradas mesmo que instância de controle está desativado
sacha barbeiro
3
É irônico que os usuários tenham a maior necessidade da dica de ferramenta quando o controle estiver desativado, pois eles querem saber por que o controle está desativado. Este é um bom exemplo de um padrão no WPF que está incorreto na grande maioria das vezes. Então vale a pena mudar isso.
Contango 04/04/19
2

Tornar a dica de ferramenta visível para TODOS os botões e caixas de seleção desativados:

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

Os BasedOn=...impede que você solta todos os outros estilos que foram aplicadas a caixa de verificação ou botão antes. Se você não usar nenhum outro estilo de botão ou caixa de seleção, poderá remover as BasedOn=..peças

Blechdose
fonte