如何禁用 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控件。

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

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

时间: 2024-07-29 22:28:05

如何禁用 WebBrowser 控件缩放和左右移动的相关文章

C# WebBrowser控件使用整理

一.简介 WebBrowser 控件为 WebBrowser ActiveX 控件提供了托管包装. 托管包装使您可以在 Windows 窗体客户端应用程序中显示网页. 使用WebBrowser 控件,可以复制应用程序中的 Internet Explorer Web 浏览功能,还可以禁用默认的 Internet Explorer 功能,并将该控件用作简单的 HTML 文档查看器. 此外,可以使用该控件将基于 DHTML 的用户界面元素添加到窗体中,还可以隐瞒这些元素在 WebBrowser 控件中

Delphi WebBrowser控件的使用(大全 good)

Delphi WebBrowser控件的使用 WebBrowser控件属性:1.Application      如果该对象有效,则返回掌管WebBrowser控件的应用程序实现的自动化对象(IDispatch).如果在宿主对象中自动化对象无效,程序将返回WebBrowser控件的自动化对象2.Parent       返回WebBrowser控件的父自动化对象,通常是一个容器,例如是宿主或IE窗口3.Containe       返回WebBrowser控件容器的自动化对象.通常该值与Pare

C# WebBrowser控件详解

 作者:827969653     0.常用方法 Navigate(string urlString):浏览urlString表示的网址 Navigate(System.Uri url):浏览url表示的网址 Navigate(string urlString, string targetFrameName, byte[] postData, string additionalHeaders): 浏览urlString表示的网址,并发送postData中的消息 //(通常我们登录一个网站的时候就

WebBrowser控件打开https站点

背景: 与上一篇博文一样,此文亦是由于开发DropboxAPI中遇到问题衍生出来的.由于需要重定向https类型网站,但自己的https证书是自签名的,总是提示'网站的安全证书存在问题'. 鉴此,查了些许资料,然而许多方法对我并没有什么卵用,不过以后还是可用用上的,故整理下[当然其中也有一些有效的方法] 首先,自己使用的是WPF中的WebBrowser 1.设置ServicePointmanager的验证回调,然而,这方法只能用于httprequest等托管代码中,webbrowser实现并不适

C#中的WebBrowser控件的使用

0.常用方法 Navigate(string urlString):浏览urlString表示的网址 Navigate(System.Uri url):浏览url表示的网址 Navigate(string urlString, string targetFrameName, byte[] postData, string additionalHeaders): 浏览urlString表示的网址,并发送postData中的消息 //(通常我们登录一个网站的时候就会把用户名和密码作为postData

C#WebBrowser控件使用教程与技巧收集

常用属性和方法 Navigate(string urlString):浏览urlString表示的网址 Navigate(System.Uri url):浏览url表示的网址 Navigate(string urlString, string targetFrameName, byte[] postData, string additionalHeaders): 浏览urlString表示的网址,并发送postData中的消息//(通常我们登录一个网站的时候就会把用户名和密码作为postData

C#中WebBrowser控件的使用

今天在YouTube上看了一个关于WebBrowser控件用法的小视频,做一下总结. 首先创建一个WinForm程序,拖入一个textbox控件和一个button按钮,然后拖入一个panel控件,如图所示: 拖入panel控件后,找到WebBrowser控件并双击,WebBrowser控件就会自动填充到panel控件上,像下面这样: 之后给button改个名,双击button按钮设置一个简单的跳转行为: private void goButton_Click(object sender, Eve

Webbrowser控件判断网页加载完毕的简单方法

一般情况下,当ReadyState属性变成READYSTATE_COMPLETE时,Webbrowser控件会通过触发DocumentCompleted事件来指示网页加载完毕.但当加载的网页包含frame时,可能会多次触发该事件,所以不能简单地通过它来判断网页加载完毕.从微软的官方网站上了解到,并非每个frame都对应了一个DocumentCompleted事件,只有触发了DownloadBegin事件的frame才会有相应的DocumentCompleted事件.另外,最外层的frame总是最

WPF 设置WebBrowser控件不弹脚本错误提示框

using System.Reflection; using System.Windows; using System.Windows.Controls; using System.Windows.Navigation; namespace HC { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow()