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.


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:



26

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

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

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.