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?
ShowDuration
propiedad, 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.ShowDuration
propiedad 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.ShowDuration
funciona, 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
ToolTip
directamente, sin explícito<ToolTip>
, lo que puede simplificar el enlace.Esto también me estaba volviendo loco esta noche. Creé una
ToolTip
subclase para manejar el problema. Para mí, en .NET 4.0, laToolTip.StaysOpen
propiedad 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 = false
se llama. ¿Tanto paraStaysOpen
, o debería decir"StaysOpen"
? Disfrutar.Pequeña perorata: ¿Por qué Microsoft no hizo que las
DependencyProperty
propiedades (captadores / definidores) fueran virtuales para que podamos aceptar / rechazar / ajustar cambios en subclases? ¿O hacer unavirtual OnXYZPropertyChanged
para 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
ToolTip
yContextMenu
. Ambos tienen clases de "servicio", comoToolTipService
yContextMenuService
, que administran ciertas propiedades, y ambos se utilizanPopup
como 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 claseToolTip
directamente. En su lugar, incrustan aStackPanel
conTextBlock
s. 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
Window
tienen unaToolTip
duración efectivamente indefinida , puede definir unStyle
en suWindow.Resources
para esos elementos. Aquí hay unStyle
paraButton
que tiene talToolTip
:También se puede agregar
Style.Resources
paraStyle
cambiar la apariencia de loToolTip
que muestra, por ejemplo:Nota: cuando hice esto también usé
BasedOn
en elStyle
modoToolTip
que 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
Opened
evento. Por ejemplo, quería evitar que se abriera a menos que tuviera algún contenido, así que manejé elOpened
evento y luego hice esto:Es un truco, pero funcionó.
Presumiblemente, podría manejar el
Closed
evento 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