Programmatically slide to next Panorama item

2020-03-03 08:31发布

问题:

Is it possible to programmatically move from one panorama page/item to the next and get the same kind of animated sliding effect you get when sliding with a finger?

I can use the PanoramaControl.DefaultItem property to move to the expected item/page, but you won't get the animated sliding effect. Any ideas here?

回答1:

it is not programatically possible to change the selected index of a panorama control. As you mention the only way of setting the index is using the DefaultItem property which is only useful when navigationg to the page which contains the panorama.

Here is another post that discusses it.



回答2:

Its possible, just put the setting of the DefaultItem between a SlideTransition Completed event and you are done:

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

Use my_panorama.SlideToPage(1) to slide to the second page.



回答3:

You can use below code :

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


回答4:

I think the easiest way to achieve this would be to create separate visual states for each item and create animated slide transitions for transitioning to each state. Then you can use VisualStateManager.GoToState(<page>, <state>, true); to initiate the state change.



回答5:

No - the panorama control doesn't support programmatic manipulation like this.

If you want an experience like this, then you could try a hand-written panorama control - e.g. http://phone.codeplex.com/