C# WP7枢轴控制和WebBrowser控制

C# WP7枢轴控制和WebBrowser控制,c#,silverlight,windows-phone-7,C#,Silverlight,Windows Phone 7,我有一个Pivot,它包含一个WebBrowser控件,几乎占据了整个页面(当然是Pivot标题中的appart) 我想弄清楚如何让WebBrowser控件允许用户向左/向右滑动以激活Pivot控件。目前它只是左右平移WebBrowser控件 这能做到吗 谢谢我不知道WP7 Pivot,但是Pivot控件上是否有任何预览*事件,允许您处理触摸并将其标记为已处理?这类似于将地图放在Pivot中-这里讨论了-已经在很多问题中提到过- 一般来说,建议似乎是基于可用性的: 尽量避免将使用触摸的控件放在

我有一个Pivot,它包含一个WebBrowser控件,几乎占据了整个页面(当然是Pivot标题中的appart)

我想弄清楚如何让WebBrowser控件允许用户向左/向右滑动以激活Pivot控件。目前它只是左右平移WebBrowser控件

这能做到吗


谢谢

我不知道WP7 Pivot,但是Pivot控件上是否有任何预览*事件,允许您处理触摸并将其标记为已处理?

这类似于将地图放在Pivot中-这里讨论了-已经在很多问题中提到过-

一般来说,建议似乎是基于可用性的:

  • 尽量避免将使用触摸的控件放在数据透视项的内部


另一方面,如果您只是使用web浏览器控件来处理非常少量的静态html(因此您根本不需要任何滚动),那么您可以从web浏览器中删除HitTesting。

虽然我无法确切地告诉您如何将滑动传递到pivot,我可以告诉你如何做这项工作的一部分:如何捕捉/分析/禁用WebBrowser上的自定义手势

如果我没记错的话,在7.0中:

  • WebBrowser组件几乎只包含一个内部TileHost,该TileHost包裹在一些网格/边框中
  • TileHost完成了与处理触摸事件相关的所有工作
  • TileHost完全在内部(在本机层中)完成了该操作,而.Net没有看到任何操作事件(我认为),或者至少它忽略了在上层处理/覆盖操作事件的所有尝试。WebBrowserInterop类在这些问题上基本上是空的
现在,在我的7.5版本中(可能也在7.1版本中,我不知道),微软似乎在努力解决一些网络浏览器操作问题——我认为他们正在努力让.Net层完全处理滚动/滑动。他们编写了一个特殊的类PanZoomContainer,并将其注入WebBrowser内部模板的VisualTree中。WebBrowserInterop通过许多事件通知通道大大丰富了内容。WebBrowserInterop钩住PanZoomContainer的操纵事件,然后将它们传递到本机层。此外,它还侦听来自本机层的事件/命令,例如称为“ZoomAndScroll”或“ShowSIP”,并主要将它们传递回PanZoomContainer。这个想法非常清楚,对吗?他们已经将事件处理从完全内部重新连接到了一点意大利面,但是已经实现了将它们通过PanZoomC

现在,这对我/我们有什么好处

它是PanZoomContainer,其Mani事件被检查。TileHost现在不捕获它们。在这个版本的WebBrowser控件中,它的VisualTree由一些边框、网格、PanZoomContainer和TileHost(渲染器)组成。与此类似:

WebBrowser
  PanZoom
    ContentPresenter
      Border/Name="border"   <- you want this one
        TileHost
WebBrowser
平移
任命者

Border/Name=“Border”调用下面的方法,并将参数作为PivotControl x:Name和WebBrowserControl x:Name传递给此方法

这里WebBrowserControl被放置在第二个透视项中,即透视索引为1,我试图向左或向右滑动,并分别到达透视索引2或1

public static void SwipteLeftRight(Microsoft.Phone.Controls.Pivot pivotControl, Microsoft.Phone.Controls.WebBrowser webBrowserControl)        
        {
            var gesListener = GestureService.GetGestureListener(webBrowserControl);
            gesListener.Flick += ((sen, args) =>
            {
                if (args.Direction == System.Windows.Controls.Orientation.Horizontal)
                {
                    if (args.HorizontalVelocity < 0)
                    {

                        if (((Microsoft.Phone.Controls.PivotItem)(pivotControl.SelectedItem)).Header.ToString().Trim() == "Pivot Item name")
                        {
                            pivotControl.SelectedIndex = 2; //Next Pivot item
                        }
                    }
                    else if (args.HorizontalVelocity > 0)
                    {

                        if ((Microsoft.Phone.Controls.PivotItem)(pivotControl.SelectedItem)).Header.ToString().Trim() == "Pivot Item name")
                        {
                            pivotControl.SelectedIndex = 0; // Previous Pivot Item
                        }
                    }
                }
            });
        }
public static void swipterleftright(Microsoft.Phone.Controls.Pivot-pivotControl、Microsoft.Phone.Controls.WebBrowser-WebBrowser-control)
{
var gesListener=GestureService.getgestureStener(webBrowserControl);
gesListener.Flick+=((sen,args)=>
{
if(args.Direction==System.Windows.Controls.Orientation.Horizontal)
{
如果(args.HorizontalVelocity<0)
{
if(((Microsoft.Phone.Controls.PivotItem)(pivotControl.SelectedItem)).Header.ToString().Trim()=“数据透视项名称”)
{
pivotControl.SelectedIndex=2;//下一个数据透视项
}
}
否则如果(args.HorizontalVelocity>0)
{
if((Microsoft.Phone.Controls.PivotItem)(pivotControl.SelectedItem)).Header.ToString().Trim()=“数据透视项名称”)
{
pivotControl.SelectedIndex=0;//上一个数据透视项
}
}
}
});
}

这对我有用。干杯

是的,我想到了,但它是一个活动的webbrowser控件,需要链接和滚动。Silverlight中没有预览事件WB:中关于泄漏的小警告和Colin编写的一些可用代码: