2010-07-18 11 views
5

Wenn ich ein WebBrowser-Steuerelement auf einer beliebigen Seite platzieren, reagiert die Seite nicht mehr auf Manipulationsereignisse unter dem WebBrowser. Andere Bereiche der Seite funktionieren gut.Windows Phone 7 WebBrowser-Steuerelement schluckt Manipulationsereignisse?

Es wird leicht durch Überschreiben OnManipulationCompleted in einer Seite bestätigt, dann ein WebBrowser-Steuerelement auf der Seite platzieren. Versuchen Sie, über den WebBrowser zu wischen, und OnManipulationCompleted wird nie aufgerufen.

Ich kann den WebBrowser nicht auf IsHitTestVisible=false einstellen, weil ich auf Links klicken kann. Aber ich möchte, dass die Seite auf Wischbewegungen nach links/rechts reagiert.

Wer hat irgendwelche guten Ideen? Oder wissen Sie, ob dies ein Fehler in der aktuellen Version ist?

+0

Gulp lesen, bestätigt. Ich habe eine Listbox hinter einem WebBrowser abgelegt und ausgefüllt. Keine Freude, Scroll-Ereignisse mit irgendwelchen offensichtlichen Mitteln in die Listbox zu bekommen. –

Antwort

2

Dies ist eine Konsequenz der Implementierung von WebBrowser. Die Berührungsereignisse werden direkt an die Browser-Engine übergeben. Sobald das passiert, ist Silverlight praktisch nicht mehr im Bild. Leider kann ich mir keine Problemumgehungen vorstellen, die dir das geben könnten, was du willst. -Skeets, MS dev

+0

Ich habe eine transparente Leinwand oben auf dem Webbrowser erstellt. Dies verhindert jedoch, dass Ereignisse überhaupt den Browser erreichen. – Esa

1

Wenn Sie wirklich es wollen:

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

Aber natürlich ist es sperrt vollständig nach unten Interaktion mit Steuer Web-Browser und es gibt einfach keine Möglichkeit, Manipulation Ereignisse Browser Echo ...

4

Ich würde gerne erweitern, was Skeet bereits geschrieben hat.

Der Punkt ist, dass das MS WP7 Entwickler-Team "Richtlinien" veröffentlicht hat, wo sie stark davon abhalten, mehrere Layout-Steuerelemente zu setzen, die dasselbe Gesten akzeptieren und auf dasselbe reagieren. Zum Beispiel sollten Sie nicht versuchen, ein Pivot in ein Pano einzubetten, da der horizontale Swipe kollidiert und es schwer ist zu unterscheiden, welche von ihnen seine Aktionen ausführen soll. Der gleiche Fall ist mit dem Browser: Es reagiert auf alle Swipes und Schwenks .. also sollte nicht in fast jede Scroll-Kontrolle gestellt werden !!

Jetzt, nachdem ich das gesagt habe, möchte ich Ihnen sagen, dass es möglich ist, es zu überwinden - obwohl es nicht einfach wird, abhängig von Ihrem tatsächlichen Fall.

Die einfachste Möglichkeit zu tun, wenn Sie immer noch über die Gesten benachrichtigt werden möchten, ist die Verwendung von GestureService/GestureListener aus der Silverlight Toolkit-Bibliothek. Selbst wenn der WebBrowser die rohen Manipulationsereignisse löscht, kann der GestureListener Sie immer noch benachrichtigen - weil er scheinbar auf einer anderen Schicht lauscht, will ich jetzt nicht unbedingt reinkommen. Nur die Bibliothek holen, Add-Referenz es, so etwas wie:

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

und fertig - Sie die Benachrichtigung erhalten, wenn jemand Flicks auf die Kontrolle, mit völlig ohne Berücksichtigung der Manipulationsereignisse e.Handled werden = true oder nicht. Kleiner Disclaimer hier: Ich kann mich nicht erinnern, ob es unter 7.0 funktioniert, weil der WebBrowser dort etwas anders aufgebaut ist. Auf 7.1 und 7.5 sollte es funktionieren.

Wenn Sie dies jedoch auf einen WebBrowser anwenden - Sie werden die Benachrichtigung erhalten - aber der Webbrowser wird es auch bekommen. Das bedeutet, dass 2 Steuerelemente reagieren werden, und es wird visuell ziemlich abweisend, wenn Sie einige Storyboards aus dem Handler starten.

Auf 7.1 und fast aktuellen 7.5, ist es möglich, hart mit dem WebBrowser und zu spielen um zu kontrollieren, welches Manipulationsereignis es sehen wird.Indem Sie also die mani-Ereignisse für den WB filtern und GestureListener verwenden, um die Ereignisse selbst zu sehen, können Sie sowohl den WB blockieren als auch gleichzeitig mit Ihren eigenen Aktionen reagieren. Ich habe ausführlich darüber in einer Antwort auf ähnliches Problem geschrieben, siehe WP7 Pivot control and a WebBrowser control für Details. Es ist jedoch keine schnelle/einfache/lustige Sache zu tun.

EDIT: und MOST wichtiger ist, ist es nicht in der Zukunft arbeiten garantiert. In den 7.1- und 7.5 SDK/OS/API-Versionen sind innerhalb des WebBrowser-Steuerelements einige wichtige interne Änderungen sichtbar, und ich wäre nicht überrascht, wenn sich dies in den nächsten Releases dramatisch ändern würde. Spielen Sie nicht mit den Dingen, über die ich geschrieben habe, wenn Sie das Thema in den nächsten 1-2 Jahren nicht noch einmal aufgreifen wollen.

-3

Ich denke, Sie eine bessere Art und Weise haben die Manipulationsereignisse erfassen, wenn es in WP7.5 Mango ist, da die Browser Kontrollen völlig unterschiedlich sind, was ich von diesen link

+0

-1 @Prakash Dies ist eine direkte Abzocke eines Blogbeitrags, den ich hier geschrieben habe: http://www.scottlogic.co.uk/blog/colin/2011/11/suppressing-zoom-and-scroll-interactions- in-the-windows-phone-7-browser-control/ – ColinE

+0

@ColineE Ja, ich habe dort geschrieben, dass ich es über den Link bekommen habe. Sollte es nicht so gemacht werden. – Prakash

+0

@ColineE Wenn Sie damit nicht zufrieden sind, gebe ich nur einen Link zu Ihrem Blog und keinen Inhalt. – Prakash