《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