2011-03-18 17 views
5

¿Es posible pasar programáticamente de una página/elemento de panorama al siguiente y obtener el mismo tipo de efecto deslizante animado que obtiene deslizando con el dedo?Deslizamiento progresivo al siguiente elemento Panorama

Puedo usar la propiedad PanoramaControl.DefaultItem para moverme al elemento/página esperado, pero no obtendrá el efecto deslizante animado. Alguna idea aqui?

+0

En realidad no, se trata de la animación, no la forma de cambiar el elemento –

Respuesta

1

no es programáticamente posible cambiar el índice seleccionado de un control panorámico. Como mencionas, la única forma de establecer el índice es usar la propiedad DefaultItem, que solo es útil cuando se navega a la página que contiene el panorama.

Here es otra publicación que lo discute.

+0

Por favor, consulte la sección de preguntas frecuentes en las firmas http://stackoverflow.com/faq#signatures – Greg

1

Creo que la forma más fácil de lograr esto sería crear estados visuales separados para cada elemento y crear transiciones de diapositivas animadas para la transición a cada estado. Luego puede usar VisualStateManager.GoToState(<page>, <state>, true); para iniciar el cambio de estado.

+1

Yo no diría que este _la way_ más fácil;) Tal vez no – jumbo

+0

el _easiest_, pero el ** único ** camino que pude pensar, haciéndolo más fácil por defecto: P –

+0

: D Ok ... me atrapaste. – jumbo

1

No: el control de panorama no es compatible con la manipulación de programas como esta.

Si desea una experiencia como esta, puede probar con un control panorámico escrito a mano, p. http://phone.codeplex.com/

6

Puede utilizar a continuación código:

panoramaRoot.DefaultItem = (PanoramaItem)panoramaRoot.Items[1]; 
+0

Esto funcionó para mí. – jade

13

Su posible, sólo hay que poner el ajuste de la defaultItem entre un evento SlideTransition terminado y que está hecho:

public static class PanoramaExtensions 
{ 
    public static void SlideToPage(this Panorama self, int item) 
    { 

     var slide_transition = new SlideTransition() { }; 
     slide_transition.Mode = SlideTransitionMode.SlideLeftFadeIn; 
     ITransition transition = slide_transition.GetTransition(self); 
     transition.Completed += delegate 
     { 
      self.DefaultItem = self.Items[item]; 
      transition.Stop(); 
     }; 
     transition.Begin(); 
    } 
} 

Uso my_panorama.SlideToPage (1) deslizar a la segunda página.

+2

Debe tener en cuenta que su respuesta se basa en la biblioteca (no estándar) Microsoft.Phone.Controls.Toolkit de CodePlex. Además, su código no depende de otros campos en su clase. Cambié eso para que el recorte sea autocontenido. Aclamaciones – henon

Cuestiones relacionadas