【问题标题】:Making swipe work for a pivot control with embedded WebBrowser on Windows Phone 8.0使用 Windows Phone 8.0 上的嵌入式 WebBrowser 使滑动适用于枢轴控件
【发布时间】:2014-03-03 01:32:02
【问题描述】:

我希望我的应用程序有一个Pivot 控件,每个PivotItem 中都有一个WebBrowser 控件。问题是滑动到下一个PivotItem 不起作用,因为它会导致水平滚动网页。但是,网页是响应式的,不需要水平滚动,所以我希望水平滑动以产生枢轴开关。这可以实现吗?如果我不能使用Pivot 控件,推荐在页面上使用WebControls 实现页面切换的方法是什么? iOS/Android 的顶级菜单?

【问题讨论】:

    标签: c# xaml windows-phone-8 microsoft-metro


    【解决方案1】:

    是的,这是可能的,但是几乎不需要解决方法,因为 Webbrowser 首先处理事件,而您的 Pivot 可能不知道它。您可以为此目的使用Touch 及其事件FrameReported。简单的代码可以是这样的:

    public MainPage()
    {
       InitializeComponent();
       Touch.FrameReported += Touch_FrameReported;
    }
    
    TouchPoint first;
    
    private void Touch_FrameReported(object sender, TouchFrameEventArgs e)
    {
       TouchPoint mainTouch = e.GetPrimaryTouchPoint(myWebBrowser);
       if (mainTouch.Action == TouchAction.Down)
             first = mainTouch;
       else if (mainTouch.Action == TouchAction.Up)
       {
           if (mainTouch.Position.X - first.Position.X < 0)
                MessageBox.Show("Next item.");
               //myPivot.SelectedIndex++;
           if (mainTouch.Position.X - first.Position.X > 0)
               MessageBox.Show("Previous item.");
              //myPivot.SelectedIndex--;
       }
    }
    

    如您所见 - 我记得用户开始移动的位置,然后当他松开触摸时 - 我更改了 myPivot.SelectetIndex。希望这有所帮助。您也可以尝试使用TouchPanel,但我认为这会更简单(如果足够的话)。


    如果您想禁用某些手势,例如下面的代码。我只启用了 Horizo​​ntalDrag - 所以它不会触发缩放。容差当然不应该是0,你要定义最适合你的App。

    // in MainPage() constructor
    TouchPanel.EnabledGestures = GestureType.HorizontalDrag; 
    
    private void Touch_FrameReported(object sender, TouchFrameEventArgs e)
    {
       TouchPoint mainTouch = e.GetPrimaryTouchPoint(myMap);
       if (mainTouch.Action == TouchAction.Down)
            first = mainTouch;
       else if (mainTouch.Action == TouchAction.Up && TouchPanel.IsGestureAvailable)
       {
          if (mainTouch.Position.X - first.Position.X < 0)
            MessageBox.Show("Next item.");
            //myPivot.SelectedIndex++;
          if (mainTouch.Position.X - first.Position.X > 0)
            MessageBox.Show("Previous item.");
            //myPivot.SelectedIndex--;
       }
    }
    

    【讨论】:

    • 谢谢。虽然这在原则上有效,但对于水平滑动条件,它需要另一个容差而不是零,因为垂直滚动可能会触发枢轴更改(除非您滚动完全垂直)。所以问题是在这种情况下使用什么公差?缩放和捏合也会触发我想象的枢轴变化。
    • @Christian 我编辑了一些代码,这样它就不会为 Zoom 触发。您可能会通过其他手势了解更多信息。
    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多