2010-07-18 4 views
5

Если я помещаю элемент управления WebBrowser на любую страницу, страница больше не будет реагировать на события манипуляции в WebBrowser. Другие области страницы работают нормально.Windows Phone 7 Управление веб-браузером с помощью ласточек манипулирует событиями?

Это легко подтвердить, переопределив OnManipulationCompleted на странице, а затем разместив элемент управления WebBrowser на странице. Попробуйте прокручивать WebBrowser, и OnManipulationCompleted никогда не вызывается.

Я не могу установить WebBrowser в IsHitTestVisible=false, потому что мне нужно иметь возможность нажимать на ссылки. Но я хочу, чтобы страница отвечала на пробелы влево/вправо.

У кого-нибудь есть яркие идеи? Или знаете, если это ошибка в текущей версии?

+0

Глоток подтвердил. Я упал и заполнил список позади WebBrowser. Никакая радость не будет получать события прокрутки в список с помощью любых очевидных средств. –

ответ

2

Это следствие того, как мы реализовали WebBrowser. События касания передаются непосредственно движку браузера. Как только это произойдет, Silverlight в основном не работает. К сожалению, я не могу придумать никаких обходных решений, которые могли бы дать вам то, что вы хотите. -Skeets, MS DEV

+0

Я создал прозрачный холст поверх веб-браузера. Тем не менее это предотвращает появление событий в браузере. – Esa

1

Если вы действительно хотите:

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

Но, конечно, он полностью блокирует взаимодействие с управлением веб-браузера, и нет никакого способа, чтобы повторить манипуляции события в браузере ...

4

Я хотел бы расширить то, что Skeet уже написал.

Дело в том, что команда разработчиков MS WP7 опубликовала «руководящие принципы», где они сильно препятствуют размещению (на одной странице) нескольких элементов управления макетами, которые принимают и реагируют на один и тот же набор жестов. Например, вы не должны пытаться встраивать Pivot внутри Pano, потому что столкновение по горизонтали будет конфликтовать, и будет трудно отличить, какие из них должны выполнять свои действия. Тот же случай с браузером: он реагирует на все swipes и сковородки .. поэтому не следует вставлять почти любой элемент управления прокруткой!

Теперь, сказав это, я хочу сказать вам, что можно преодолеть его - хотя это может оказаться нелегким, в зависимости от вашего фактического случая.

Самая тривиальная вещь, чтобы сделать, если вы хотите по-прежнему получать уведомления о жестов является использование GestureService/GestureListener из библиотеки Silverlight Toolkit. Даже когда WebBrowser гасит события необработанных манипуляций, GestureListener все равно сможет уведомить вас - потому что он, по-видимому, слушает какой-то «другой слой», я точно не хочу сейчас в него входить. Просто принести в библиотеку, добавление ссылки на него, сделать что-то вроде:

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

и это сделано - вы получите уведомление всякий раз, когда кто-то щелкает по контролю, с совершенно не обращая внимания на манипуляцию мероприятиях, e.handled = истина или нет. Небольшая оговорка здесь: я не помню, работает ли на 7.0, потому что WebBrowser там немного отличается. На 7.1 и 7.5 он должен работать.

Однако, если вы примените это к WebBrowser - вы получите notif - но webbrowser получит его тоже. Это означает, что 2 элемента управления будут реагировать, и это станет визуально совершенно отвергающим, если вы начнете некоторые раскадровки изнутри обработчика.

На 7.1 и почти 7.5, можно играть с WebBrowser и чтобы полностью контролировать, какое манипуляционное событие он увидит.Таким образом, путем фильтрации mani-событий для WB и с помощью GestureListener для просмотра событий самостоятельно, вы можете как заблокировать WB от чего-либо, так и в то же время вы можете ответить своим действием. Я написал об этом в ответ на аналогичную проблему, см. WP7 Pivot control and a WebBrowser control. Это не быстрый/легкий/смешной поступок.

EDIT: и MOST главное, это не гарантирует работу в будущем. На протяжении версий 7.1 и 7.5 SDK/OS/API внутри элемента управления WebBrowser видны некоторые основные внутренние изменения, и я не удивлюсь, если это резко изменится в следующих нескольких выпусках. Не играйте с вещами, о которых я писал там, если вы не хотите снова пересматривать тему в следующие 1-2 года.

-3

Я думаю, что у вас есть лучший способ захвата события манипуляций, если он находится в WP7.5 Mango, так как элементы управления браузера совершенно различны, что я читал из этого link

+0

-1 @Prakash Это прямая копия сообщения в блоге, которое я написал здесь: http://www.scottlogic.co.uk/blog/colin/2011/11/suppressing-zoom-and-scroll-interactions- in-the-windows-phone-7-browser-control/ – ColinE

+0

@ColinE Да, я написал там, что получил его по ссылке. Не следует так делать. – Prakash

+0

@ColinE Если вы недовольны этим, я просто дам ссылку на ваш блог, а не какой-либо контент. – Prakash