La respuesta pegada es buena, pero puede no aplicarse en su caso porque deja la animación adjunta a la propiedad IsOpen, bloqueándola efectivamente en su lugar e impidiendo que se modifique mediante la configuración de propiedad directa, enlace y otras formas . Esto puede dificultar el uso con su código, dependiendo de cómo lo esté usando.
Si ese es el caso, me gustaría cambiar a partir de un DispatcherTimer cuando se quiere abrir una ventana emergente con cierto retraso, así:
_popupTimer = new DispatcherTimer(DispatcherPriority.Normal);
_popupTimer.Interval = TimeSpan.FromMilliseconds(100);
_popupTimer.Tick += (obj, e) =>
{
_popup.IsOpen = true;
};
_popupTimer.Start();
Para un comportamiento sobre herramientas-como esto se podría hacer en MouseEnter . Si desea cancelar la apertura emergente por alguna razón (por ejemplo, si el ratón deja el control antes de que aparezca la ventana emergente), simplemente:
_popupTimer.Stop();
actualización
Como cplotts o dedos en el comentario, también querrá establecer _popup.IsOpen = false
en algunas situaciones en el evento MouseLeave, dependiendo de su lógica para manejar los eventos de entrada/salida del mouse entre su control y la ventana emergente. Tenga en cuenta que generalmente no desea configurar a ciegas IsOpen=false
en cada evento MouseLeave, porque puede hacerlo cuando aparezca la ventana emergente sobre él. En algunas situaciones, esto generaría una ventana emergente parpadeante. Entonces necesitarás algo de lógica allí.
Buen punto ... y buena idea. Es posible que también desee borrar el valor de IsOpen en MouseLeave en la solución anterior. – cplotts
Sí, es probable que desee hacer esto, pero con cuidado. Actualizaré mi respuesta para explicar a qué me refiero. –
Ray, muchas gracias! Esta era exactamente la funcionalidad que necesitaba. – Stewbob