Tenho uma dica de ferramenta para um rótulo e quero que fique aberto até que o usuário mova o mouse para um controle diferente.
Tentei as seguintes propriedades na dica de ferramenta:
StaysOpen="True"
e
ToolTipService.ShowDuration = "60000"
Mas, em ambos os casos, a dica de ferramenta é exibida apenas por exatamente 5 segundos.
Por que esses valores estão sendo ignorados?
ShowDuration
propriedade, acho que é algo parecido30,000
. Qualquer coisa maior do que isso e o padrão voltará a ser5000
.ToolTipService.ShowDuration="60000"
funcionou. Ele não voltou para o padrão5000
.ToolTipService.ShowDuration
propriedade para qualquer valor> = 0 (para Int32.MaxValue), no entanto, a dica de ferramenta não permanecerá aberta por esse comprimento.Respostas:
Basta colocar este código na seção de inicialização.
fonte
new FrameworkPropertyMetadata("Top")
não funciona.TooltipService.ShowDuration
funciona, mas você deve defini-lo no objeto que tem a dica de ferramenta, assim:Eu diria que esse design foi escolhido porque permite a mesma dica de ferramenta com diferentes tempos limite em controles diferentes.
fonte
ToolTip
diretamente, sem explícito<ToolTip>
, o que pode tornar a vinculação mais simples.Isso também estava me deixando louco esta noite. Criei uma
ToolTip
subclasse para lidar com o problema. Para mim, no .NET 4.0, aToolTip.StaysOpen
propriedade não fica "realmente" aberta.Na classe abaixo, use a nova propriedade
ToolTipEx.IsReallyOpen
, em vez de propriedadeToolTip.IsOpen
. Você obterá o controle que deseja. Por meio daDebug.Print()
chamada, você pode observar na janela Saída do depurador quantas vezesthis.IsOpen = false
é chamado! Tanto paraStaysOpen
, ou devo dizer"StaysOpen"
? Aproveitar.Pequeno discurso retórico: por que a Microsoft não tornou as
DependencyProperty
propriedades (getters / setters) virtuais para que possamos aceitar / rejeitar / ajustar as alterações nas subclasses? Ou fazer umvirtual OnXYZPropertyChanged
para cada umDependencyProperty
? Ugh.---Editar---
Minha solução acima parece estranha no editor XAML - a dica de ferramenta está sempre aparecendo, bloqueando algum texto no Visual Studio!
Esta é a melhor maneira de resolver este problema:
Algum XAML:
Algum código:
Conclusão: Algo está diferente nas aulas
ToolTip
eContextMenu
. Ambos têm classes de "serviço", comoToolTipService
eContextMenuService
, que gerenciam certas propriedades, e ambos usamPopup
como um controle pai "secreto" durante a exibição. Finalmente, percebi que TODOS os exemplos de dicas de ferramentas XAML na Web não usam classesToolTip
diretamente. Em vez disso, eles incorporam aStackPanel
comTextBlock
s. Coisas que te fazem dizer: "hmmm ..."fonte
Provavelmente, você deseja usar o Popup em vez do Tooltip, pois o Tooltip pressupõe que você o está usando na forma de padrões de IU predefinidos.
Não sei por que StaysOpen não funciona, mas ShowDuration funciona conforme documentado no MSDN - é a quantidade de tempo que a dica de ferramenta é exibida QUANDO é exibida. Defina-o para um valor pequeno (por exemplo, 500 mseg) para ver a diferença.
O truque no seu caso é manter o estado de "último controle pairado", mas uma vez que você tenha isso, deve ser bastante trivial alterar o destino do canal e o conteúdo dinamicamente (manualmente ou por meio de vinculação) se você estiver usando um Popup, ou ocultando o último Popup visível se você estiver usando vários.
Existem algumas pegadinhas com os Popups no que diz respeito ao redimensionamento e movimentação de janelas (Popups não se movem com os contêineres), então você pode querer ter isso em mente enquanto ajusta o comportamento. Veja este link para mais detalhes.
HTH.
fonte
Se você deseja especificar que apenas certos elementos em seu
Window
têmToolTip
duração efetivamente indefinida, você pode definir umStyle
em seuWindow.Resources
para esses elementos. Aqui está umStyle
paraButton
que tenha talToolTip
:Também se pode adicionar
Style.Resources
aoStyle
para mudar a aparência doToolTip
que mostra, por exemplo:Nota: Quando fiz isso, também usei
BasedOn
noStyle
para que tudo o mais definido para a versão do meu controle personalizado com um normalToolTip
fosse aplicado.fonte
Eu estava lutando com o WPF Tooltip outro dia. Não parece ser possível impedir que apareça e desapareça por si mesmo, então no final acabei recorrendo ao tratamento do
Opened
evento. Por exemplo, eu queria impedir que ele abrisse, a menos que tivesse algum conteúdo, então manipulei oOpened
evento e fiz o seguinte:É um hack, mas funcionou.
Presumivelmente, você poderia manipular o
Closed
evento da mesma forma e dizer para abrir novamente, mantendo-o assim visível.fonte
Apenas para fins de integridade: no código, é assim:
fonte
Além disso, se você quiser colocar qualquer outro controle em sua dica de ferramenta, ele não poderá ser focalizado, pois uma dica de ferramenta em si pode obter o foco. Então, como disse micahtan, sua melhor chance é um Popup.
fonte
Resolvi meu problema com o mesmo código.
ToolTipService.ShowDurationProperty.OverrideMetadata (typeof (DependencyObject), novo FrameworkPropertyMetadata (Int32.MaxValue));
fonte
Está funcionando para mim. Copie esta linha em seu construtor de classe.
fonte