Tengo una información sobre herramientas para una etiqueta y quiero que permanezca abierta hasta que el usuario mueva el mouse a un control diferente.
He probado las siguientes propiedades en la información sobre herramientas:
StaysOpen="True"
y
ToolTipService.ShowDuration = "60000"
Pero en ambos casos, la información sobre herramientas solo se muestra durante exactamente 5 segundos.
¿Por qué se ignoran estos valores?

ShowDurationpropiedad, creo que es algo así30,000. Cualquier cosa mayor que eso y volverá por defecto a5000.ToolTipService.ShowDuration="60000". No fue por defecto volver a5000.ToolTipService.ShowDurationpropiedad en cualquier valor> = 0 (en Int32.MaxValue), sin embargo, la información sobre herramientas no permanecerá abierta durante ese tiempo.Respuestas:
Simplemente coloque este código en la sección de inicialización.
fuente
new FrameworkPropertyMetadata("Top")no funciona.TooltipService.ShowDurationfunciona, pero debe configurarlo en el objeto que tiene la información sobre herramientas, así:Yo diría que se eligió este diseño porque permite la misma información sobre herramientas con diferentes tiempos de espera en diferentes controles.
fuente
ToolTipdirectamente, sin explícito<ToolTip>, lo que puede simplificar el enlace.Esto también me estaba volviendo loco esta noche. Creé una
ToolTipsubclase para manejar el problema. Para mí, en .NET 4.0, laToolTip.StaysOpenpropiedad no "realmente" permanece abierta.En la siguiente clase, use la nueva propiedad
ToolTipEx.IsReallyOpen, en lugar de la propiedadToolTip.IsOpen. Obtendrá el control que desea. A través de laDebug.Print()llamada, puede ver en la ventana de salida del depurador cuántas vecesthis.IsOpen = falsese llama. ¿Tanto paraStaysOpen, o debería decir"StaysOpen"? Disfrutar.Pequeña perorata: ¿Por qué Microsoft no hizo que las
DependencyPropertypropiedades (captadores / definidores) fueran virtuales para que podamos aceptar / rechazar / ajustar cambios en subclases? ¿O hacer unavirtual OnXYZPropertyChangedpara todos y cada unoDependencyProperty? Ugh.---Editar---
Mi solución anterior se ve extraña en el editor XAML: ¡la información sobre herramientas siempre se muestra, bloqueando parte del texto en Visual Studio!
Aquí hay una mejor manera de resolver este problema:
Algunos XAML:
Algún código:
Conclusión: hay algo diferente en las clases
ToolTipyContextMenu. Ambos tienen clases de "servicio", comoToolTipServiceyContextMenuService, que administran ciertas propiedades, y ambos se utilizanPopupcomo un control principal "secreto" durante la visualización. Finalmente, noté que TODOS los ejemplos de información sobre herramientas XAML en la Web no usan la claseToolTipdirectamente. En su lugar, incrustan aStackPanelconTextBlocks. Cosas que te hacen decir: "hmmm ..."fuente
Probablemente desee usar Popup en lugar de Tooltip, ya que Tooltip asume que lo está usando en la forma predefinida de estándares de IU.
No estoy seguro de por qué StaysOpen no funciona, pero ShowDuration funciona como se documenta en MSDN: es la cantidad de tiempo que se muestra la información sobre herramientas CUANDO se muestra. Ajústelo a una pequeña cantidad (por ejemplo, 500 mseg) para ver la diferencia.
El truco en su caso es mantener el estado de "último control flotante", pero una vez que lo tenga, debería ser bastante trivial cambiar el destino de ubicación y el contenido de forma dinámica (ya sea manualmente o mediante enlace) si está utilizando una ventana emergente, u ocultando la última ventana emergente visible si está utilizando varios.
Hay algunos errores con las ventanas emergentes en cuanto al cambio de tamaño y movimiento de la ventana (las ventanas emergentes no se mueven con los contenedores), por lo que es posible que también desee tener eso en cuenta mientras modifica el comportamiento. Consulte este enlace para obtener más detalles.
HTH.
fuente
Si desea especificar que solo ciertos elementos en su
Windowtienen unaToolTipduración efectivamente indefinida , puede definir unStyleen suWindow.Resourcespara esos elementos. Aquí hay unStyleparaButtonque tiene talToolTip:También se puede agregar
Style.ResourcesparaStylecambiar la apariencia de loToolTipque muestra, por ejemplo:Nota: cuando hice esto también usé
BasedOnen elStylemodoToolTipque se aplicaría todo lo demás definido para la versión de mi control personalizado con una normal .fuente
Estuve luchando con la descripción emergente de WPF el otro día. No parece posible evitar que aparezca y desaparezca por sí solo, así que al final recurrí a manejar el
Openedevento. Por ejemplo, quería evitar que se abriera a menos que tuviera algún contenido, así que manejé elOpenedevento y luego hice esto:Es un truco, pero funcionó.
Presumiblemente, podría manejar el
Closedevento de manera similar y decirle que se abra nuevamente, manteniéndolo visible.fuente
Solo en aras de la integridad: en el código se ve así:
fuente
Además, si alguna vez desea poner cualquier otro control en su información sobre herramientas, no podrá enfocarse ya que una información sobre herramientas en sí misma puede obtener el foco. Entonces, como dijo micahtan, tu mejor oportunidad es una ventana emergente.
fuente
Resolví mi problema con el mismo código.
ToolTipService.ShowDurationProperty.OverrideMetadata (typeof (DependencyObject), nuevo FrameworkPropertyMetadata (Int32.MaxValue));
fuente
Me está funcionando. Copie esta línea en el constructor de su clase.
fuente