Windows Phone 7 如何禁用WebBrowser 控制元件縮放和左右移動

l_serein發表於2013-01-13

我認為有兩種方法可以實現。

  1, WebBrowser 是基於IE 9的,所以WebBrowser 也是支援最新的HTML5標準。然而在HTML中有許多控制元件是通過Browser的 pan 和zoom等手持行為起作用的,您可以設定HTML中的 viewport metadata 元素來實現。如:將下面的HTML程式碼加入到您的HTML檔案頭上。

<meta name="viewport" content="user-scalable=no" />

  2, WebBroswer控制元件的組成是一棵樹型結構如下圖:

  \-WebBrowser

  \-Border

  \-Border

  \-PanZoomContainer

  \-Grid

  \-Border (*)

  \-ContentPresenter

  \-TileHost

  其中 TileHost 就是原始的IE9元件,TileHost 不處理所有的manipulation相關的事件,而是由PanZoomContainer來處理,將這些事件轉換成手持,然後將結果傳輸到TileHost。

  換句話說我們可以中斷相關的manipulationg事件傳輸到PanZoomContainer。當這些事件還未bubble up到PanZoomContainer時,當這些事件設定為已經處理過。

  這個方法的關鍵步驟有2步:

  1, 需要從WebBroswer元件樹中找到Border控制元件。請參考:http://www.scottlogic.co.uk/blog/colin/2010/03/linq-to-visual-tree/

  2, 處理manipulation相關的事件,並設定該事件已經處理過 e.Handled = true;。

  例如:

using LinqToVisualTree;

public class WebBrowserHelper

    {

        public  WebBrowser _browser;



        /// <summary>

        /// Gets or sets whether to suppress the scrolling of

        /// the WebBrowser control;

        /// </summary>

        public bool ScrollDisabled { getset; }



        public WebBrowserHelper(WebBrowser browser)

        {

            _browser = browser;

            browser.Loaded += new RoutedEventHandler(browser_Loaded);

        }



        private void browser_Loaded(object sender, RoutedEventArgs e)

        {

            var border = _browser.Descendants<Border>().Last() as Border;



            border.ManipulationDelta += Border_ManipulationDelta;

            border.ManipulationCompleted += Border_ManipulationCompleted;

        }



        private void Border_ManipulationCompleted(object sender,

                                                  ManipulationCompletedEventArgs e)

        {

            // suppress zoom

            if (e.FinalVelocities.ExpansionVelocity.X != 0.0 ||

                e.FinalVelocities.ExpansionVelocity.Y != 0.0)

                e.Handled = true;

        }



        private void Border_ManipulationDelta(object sender,

                                              ManipulationDeltaEventArgs e)

        {

            // suppress zoom

            if (e.DeltaManipulation.Scale.X != 0.0 ||

                e.DeltaManipulation.Scale.Y != 0.0)

                e.Handled = true;



            // optionally suppress scrolling

            if (ScrollDisabled)

            {

                if (e.DeltaManipulation.Translation.X != 0.0 ||

                  e.DeltaManipulation.Translation.Y != 0.0)

                    e.Handled = true;

            }

        }

    }

  本文來自Stephen Ding的部落格,原文地址:http://www.cnblogs.com/Stephending/archive/2012/02/16/WP7_Silverlight_WebBroswer.html

相關文章