Windows Phone 7: 如何禁用 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;。

 

例如:


001 using LinqToVisualTree;
002  
003 public class WebBrowserHelper
004  
005     {
006  
007         public  WebBrowser _browser;
008  
009   
010  
011         /// <summary>
012  
013         /// Gets or sets whether to suppress the scrolling of
014  
015         /// the WebBrowser control;
016  
017         /// </summary>
018  
019         public bool ScrollDisabled { getset; }
020  
021   
022  
023         public WebBrowserHelper(WebBrowser browser)
024  
025         {
026  
027             _browser = browser;
028  
029             browser.Loaded += new RoutedEventHandler(browser_Loaded);
030  
031         }
032  
033   
034  
035         private void browser_Loaded(object sender, RoutedEventArgs e)
036  
037         {
038  
039             var border = _browser.Descendants<Border>().Last() as Border;
040  
041   
042  
043             border.ManipulationDelta += Border_ManipulationDelta;
044  
045             border.ManipulationCompleted += Border_ManipulationCompleted;
046  
047         }
048  
049   
050  
051         private void Border_ManipulationCompleted(object sender,
052  
053                                                   ManipulationCompletedEventArgs e)
054  
055         {
056  
057             // suppress zoom
058  
059             if (e.FinalVelocities.ExpansionVelocity.X != 0.0 ||
060  
061                 e.FinalVelocities.ExpansionVelocity.Y != 0.0)
062  
063                 e.Handled = true;
064  
065         }
066  
067   
068  
069         private void Border_ManipulationDelta(object sender,
070  
071                                               ManipulationDeltaEventArgs e)
072  
073         {
074  
075             // suppress zoom
076  
077             if (e.DeltaManipulation.Scale.X != 0.0 ||
078  
079                 e.DeltaManipulation.Scale.Y != 0.0)
080  
081                 e.Handled = true;
082  
083   
084  
085             // optionally suppress scrolling
086  
087             if (ScrollDisabled)
088  
089             {
090  
091                 if (e.DeltaManipulation.Translation.X != 0.0 ||
092  
093                   e.DeltaManipulation.Translation.Y != 0.0)
094  
095                     e.Handled = true;
096  
097             }
098  
099         }
100  
101     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值