WP7 如何禁用WebBrowser 控件缩放和左右移动
2012-02-27 18:21
435 查看
我认为有两种方法可以实现。
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;。
例如:
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;
}
}
}
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;。
例如:
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;
}
}
}
相关文章推荐
- WP7 如何禁用WebBrowser 控件缩放和左右移动
- WP7 如何禁用WebBrowser 控件缩放和左右移动
- WP7 如何禁用WebBrowser 控件缩放和左右移动
- Windows Phone 7: 如何禁用 WebBrowser 控件缩放和左右移动
- Windows Phone 7 如何禁用WebBrowser 控件缩放和左右移动
- [置顶] viewPager+photoView实现图片轮播和手势缩放功能 支持手势缩放的imageView 如何实现相册左右滑动和手势缩放 如何让图片自适应控件大小 photoView如何使用(上)
- wpf 如何让控件左右移动
- 如何利用 WebBrowser 控件,显示 .GIF 动画?
- WP7 开发(十二) WebBrowser控件
- Win7:如何禁用IE8 自定义缩放功能
- wp7 webbrowser UI界面可视区域设置,防止控件默认的自动缩小网页
- MFC笔记:如何移动控件位置,改变控件大小等
- [iOS开发项目-3] 按钮控件的移动,放大缩小,左右旋转操作
- vs2005的webbrowser控件如何接收鼠标事件
- 如何让 WebBrowser 控件可以截获自己POST出去的数据
- 如何禁用Visual Studio 2010中的鼠标滚轮缩放功能
- 如何让自定义的基于CStatic的控件响应鼠标移动的消息
- VB Webbrowser控件如何屏蔽右键
- WebBrowser控件禁用超链接转向、脚本错误提示、默认右键菜单和快捷键
- VC/MFC 如何将位图缩放显示在Static控件中