標籤:des http os 檔案 io re
我認為有兩種方法可以實現。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控制項。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;
}
}
}
詳細說明:http://wp.662p.com/thread-7952-1-1.html