2010-07-18 12 views
5

Si coloco un control WebBrowser en cualquier página, la página ya no responde a los eventos de manipulación en WebBrowser. Otras áreas de la página funcionan bien.Windows Phone 7 El control WebBrowser se traga los eventos de manipulación?

Se confirma fácilmente anulando OnManipulationCompleted en una página, luego colocando un control WebBrowser en la página. Intente deslizar sobre WebBrowser y nunca se llama al OnManipulationCompleted.

No puedo configurar WebBrowser en IsHitTestVisible=false porque necesito poder hacer clic en los enlaces. Pero quiero que la página responda a los golpes hacia la izquierda/derecha.

¿Alguien tiene alguna idea brillante? ¿O sabes si esto es un error en la versión actual?

+0

Gulp, confirmó. Dejé caer y llené un cuadro de lista detrás de un WebBrowser. No es nada divertido obtener eventos de desplazamiento en el cuadro de lista por cualquier medio obvio. –

Respuesta

2

Esto es una consecuencia de la forma en que implementamos WebBrowser. Los eventos táctiles se transfieren directamente al motor del navegador. Una vez que eso sucede, Silverlight está básicamente fuera de la imagen. Desafortunadamente no puedo pensar en ninguna solución alternativa que pueda darte lo que quieres. -Skeets, MS dev

+0

Creé un lienzo transparente en la parte superior del navegador web. Sin embargo, esto evita que los eventos lleguen al navegador. – Esa

1

Si realmente lo quiere:

<Grid> 
    <phone:WebBrowser Source="http://www.microsoft.com" /> 
    <Rectangle Fill="Transparent" ManipulationCompleted="HandleManipulationCompleted"/> 
</Grid> 

Pero, por supuesto, completamente bloquea los interacción con el control del explorador web y simplemente no hay manera de eco de eventos de manipulación para el navegador ...

4

Me gustaría extender lo que Skeet ya escribió.

El punto es que el equipo de desarrollo de MS WP7 ha publicado "directrices", donde desaconsejan colocar múltiples controles de diseño que acepten y reaccionen al mismo conjunto de gestos (en la misma página). Por ejemplo, no debe intentar insertar un Pivot dentro de un Pano, porque el deslizamiento horizontal chocará y será difícil distinguir cuál de ellos debería ejecutar sus acciones. El mismo caso es con el navegador: responde a todos los golpes y paneos ... ¡así que no debería colocarse en casi ningún control de desplazamiento!

Ahora, una vez dicho esto, quiero decir que es posible superarlo, aunque puede no ser fácil, dependiendo de su caso real.

Lo más trivial que puede hacer, si desea recibir notificaciones sobre , gestos es utilizar GestureService/GestureListener de la biblioteca de Silverlight Toolkit. Incluso cuando WebBrowser extingue los eventos de manipulaciones en bruto, el GestureListener aún podrá notificarte, porque aparentemente escucha en "otra capa", no quiero exactamente entrar ahora. Sólo ha podido ir a la biblioteca, complemento referencia a ella, hacer algo como:

GestureService.GetListener(targetcontrol).Flick(myBrowserFlickHandler); 

y está hecho - se obtiene la notificación cada vez que se e.Handled películas de alguien en el control por completo, con ninguna consideración de los eventos de manipulación = true o no. Aquí hay una pequeña exención de responsabilidad: no recuerdo si en 7.0 funciona, porque WebBrowser se construye un poco diferente allí. En 7.1 y 7.5 debería funcionar.

Sin embargo, si aplica eso en un WebBrowser, obtendrá el notif, pero el navegador web también lo obtendrá. Eso significa que los 2 controles reaccionarán, y será visualmente bastante rechazado si inicia algunos guiones gráficos desde el controlador.

En 7.1 y casi actual 7.5, es posible jugar duro con WebBrowser y para controlar completamente qué evento de manipulación verá.Por lo tanto, al filtrar los mani-eventos para el WB, y al usar GestureListener para ver los eventos usted mismo, puede bloquear al WB para que no haga nada, y al mismo tiempo puede responder con su propia acción. He escrito mucho sobre eso en una respuesta a un problema similar, vea WP7 Pivot control and a WebBrowser control para más detalles. Sin embargo, no es algo rápido/fácil/divertido.

EDIT: y MÁS importante, no se garantiza que funcione en el futuro . A lo largo de las versiones 7.1 y 7.5 de SDK/OS/API, dentro del control WebBrowser se pueden ver algunos cambios internos importantes, y no me sorprendería si esto cambiara drásticamente en las próximas versiones. No juegue con las cosas que he escrito allí si no quiere tener que volver a visitar el tema nuevamente en los próximos 1-2 años.

-3

yo creo que hay una mejor manera de capturar los eventos de manipulación, si está en WP7.5 Mango desde los controles del navegador son completamente diferentes, que leí de este link

+0

-1 @Prakash Esto es una estafa directa de una publicación de blog que escribí aquí: http://www.scottlogic.co.uk/blog/colin/2011/11/suppressing-zoom-and-scroll-interactions- in-the-windows-phone-7-browser-control/ – ColinE

+0

@ColinE Sí, escribí allí que lo obtuve del enlace. ¿No debería hacerse así? – Prakash

+0

@ColinE Si no está contento con eso, le daré un enlace a su blog y no a ningún contenido. – Prakash