《WebBrowser》 如何禁用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;。

 

例如:

  1 using LinqToVisualTree;
  2 
  3 public class WebBrowserHelper
  4 
  5     {
  6 
  7         public  WebBrowser _browser;
  8 
  9  
 10 
 11         /// <summary>
 12 
 13         /// Gets or sets whether to suppress the scrolling of
 14 
 15         /// the WebBrowser control;
 16 
 17         /// </summary>
 18 
 19         public bool ScrollDisabled { get; set; }
 20 
 21  
 22 
 23         public WebBrowserHelper(WebBrowser browser)
 24 
 25         {
 26 
 27             _browser = browser;
 28 
 29             browser.Loaded += new RoutedEventHandler(browser_Loaded);
 30 
 31         }
 32 
 33  
 34 
 35         private void browser_Loaded(object sender, RoutedEventArgs e)
 36 
 37         {
 38 
 39             var border = _browser.Descendants<Border>().Last() as Border;
 40 
 41  
 42 
 43             border.ManipulationDelta += Border_ManipulationDelta;
 44 
 45             border.ManipulationCompleted += Border_ManipulationCompleted;
 46 
 47         }
 48 
 49  
 50 
 51         private void Border_ManipulationCompleted(object sender,
 52 
 53                                                   ManipulationCompletedEventArgs e)
 54 
 55         {
 56 
 57             // suppress zoom
 58 
 59             if (e.FinalVelocities.ExpansionVelocity.X != 0.0 ||
 60 
 61                 e.FinalVelocities.ExpansionVelocity.Y != 0.0)
 62 
 63                 e.Handled = true;
 64 
 65         }
 66 
 67  
 68 
 69         private void Border_ManipulationDelta(object sender,
 70 
 71                                               ManipulationDeltaEventArgs e)
 72 
 73         {
 74 
 75             // suppress zoom
 76 
 77             if (e.DeltaManipulation.Scale.X != 0.0 ||
 78 
 79                 e.DeltaManipulation.Scale.Y != 0.0)
 80 
 81                 e.Handled = true;
 82 
 83  
 84 
 85             // optionally suppress scrolling
 86 
 87             if (ScrollDisabled)
 88 
 89             {
 90 
 91                 if (e.DeltaManipulation.Translation.X != 0.0 ||
 92 
 93                   e.DeltaManipulation.Translation.Y != 0.0)
 94 
 95                     e.Handled = true;
 96 
 97             }
 98 
 99         }
100 
101     }


转自:http://www.cnblogs.com/Stephending/archive/2012/02/16/WP7_Silverlight_WebBroswer.html

posted @ 2012-07-13 15:27  ╰→劉じ尛鶴  阅读(822)  评论(0编辑  收藏  举报