2013-06-10 13 views
5

Ho letto questa domanda has been asked before, ma mai per Windows Phone 8 è stata fornita una risposta.Prevenire lo scorrimento tra gli elementi Pivot

In Windows Phone 7, è stato possibile impostare isHitTestVisible = false sull'elemento base Pivot per impedire a PivotItem di scorrere quando si scorre su determinati elementi, come cursori e caselle di testo. In Windows Phone 8, tuttavia, gli oggetti Pivot si spostano prima dell'evento ManipulationStarted (o anche degli eventi dell'oggetto Touch). Ciò significa che non è possibile impedire lo scorrimento tra i Pivot ascoltando ManipulationStarted su determinati Controlli come uno potrebbe essere in Windows Phone 7.

C'è un modo per disabilitare lo scorrimento su determinati elementi, o anche alcune sezioni dello schermo?

+0

Ho provato a riprodurre il caso e ho scoperto che il controllo 'Slider' funziona bene all'interno di un controllo' Pivot': posso modificare il valore Slider senza scorrere tra i Pivot. Qual è il problema che hai con lo Slider? –

+0

Stai utilizzando più di un Pivot? Stai facendo scorrere (invece di toccare) per cambiare il valore del cursore? Il problema sorge solo quando si tenta di trascinare il cursore quando esistono più pivot, –

+0

Per "più di un pivot", si intende un pivot all'interno di un altro pivot? O come un pivot nella metà superiore dello schermo e un altro nella parte inferiore? –

risposta

14

Se il tuo problema è che gli eventi di manipolazione deglutire Pivot per mappa/dispositivo di scorrimento/ecc. controlli, prova a impostare UseOptimizedManipulationRouting="False".

MSDN avere una spiegazione più lunga di questa proprietà.

Altrimenti l'approccio corretto è utilizzare Pivot.IsLocked="True".

+4

L'impostazione 'UseOptimizedManipulationRouting' su false aiuterà. Ma non dimenticare di 'e.Handle = true' nel gestore di eventi del tuo controllo. – Chepene

+0

Magico! Molte grazie! – Zakhar

0

Ti suggerisco di utilizzare WP Silverlight Tolkit, forniscono eventi di gesture piacevoli e il tuo evento è WhenFlicked().

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

Funzione:

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; 
       } 
      } 

Ho anche provato a scrivere il mio caso colpo, ma questo è il modo migliore e non attiva gli eventi di elementi inseriti nella pagina. Good Luck

2

Per UWP volevo usare Pivot più come controllo delle schede quindi dovevo sovrascrivere lo stile di pivot e c'è un elemento Pivot Panel quindi se disabilitiamo ManipulationMode = Nessuno lo swipe sarà disabilitato e funzionerà più come le schede .

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