• WP7 如何禁用WebBrowser 控件缩放和左右移动


    我认为有两种方法可以实现。

    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 { get; set; }

            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;

                }

            }

        }

  • 相关阅读:
    注意:开发环境不同,启动代码不同…
    6410在rvds下编译启动代码报错分析
    S3C6410的启动代码分析&nbsp;一
    s3c6410开发板LED驱动程序设计详细…
    季逸超:90后IT少年的“盖茨梦”
    我的博客今天0岁52天了,我领取了…
    在linux中获取错误返回信息&nbsp;&amp;…
    各种居中对齐
    文本对齐方式
    素描人像
  • 原文地址:https://www.cnblogs.com/Stephending/p/WP7_Silverlight_WebBroswer.html
Copyright © 2020-2023  润新知