防止在Pivot元素之间滑动

时间:2013-06-10 21:58:40

标签: c# windows-phone-7 windows-phone-8

我理解这个问题has been asked before,但从未对Windows Phone 8有过回答。

在Windows Phone 7中,可以在基础isHitTestVisible = false元素上设置Pivot,以便在滑动某些元素(如“滑块”和“文本框”)时阻止PivotItem滚动。但是,在Windows Phone 8中,Pivot在ManipulationStarted事件(甚至是Touch对象的事件)触发之前滚动。这意味着无法通过在Windows Phone 7中监听某些控件上的ManipulationStart来阻止在Pivots之间滚动。

有没有办法禁止滚动某些元素,甚至屏幕的某些部分?

3 个答案:

答案 0 :(得分:14)

如果您的实际问题是Pivot吞下地图/滑块等操作事件。控制,尝试设置UseOptimizedManipulationRouting="False"

MSDN对此属性有更长的解释。

否则正确的方法是使用Pivot.IsLocked="True"

答案 1 :(得分:2)

对于UWP,我想更像像标签控件一样使用Pivot,所以我要覆盖枢轴样式,并且有一个元素Pivot Panel,所以如果我们禁用ManipulationMode =无滑动将被禁用并且它将工作更像是标签。

<PivotPanel x:Name="Panel" VerticalAlignment="Stretch" ManipulationMode="None">

答案 2 :(得分:0)

我建议您使用WP Silverlight Tolkit,它们提供了很好的手势事件,而您的事件是WhenFlicked()。

xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
<toolkit:GestureService.GestureListener>
    <toolkit:GestureListener Flick="WhenFlicked"/>
</toolkit:GestureService.GestureListener>

功能:

if (e.Direction.ToString() == "Horizontal") //Left or right
            {
                if (e.HorizontalVelocity > 0) //Right
                {
                    Pivot.CurrentItem=Pivot.CurrentItem+1; //don't remember the code for changing the page...
                }
                else //Left
                {
                    Pivot.CurrentItem=Pivot.CurrentItem-1;
                }
            }

我也试过编写我的滑动事件,但是这个更好,并且不会触发页面上放置元素的事件。祝你好运