在SelectionChanged事件中将Pivot Selection设置为另一个

时间:2015-05-16 20:56:46

标签: c# windows-phone pivotviewer pivotitem

当我从项目[2]导航到项目[1],从项目[3]导航到项目[2]等时,我想制作一个导航到项目[0]的轴。

这是代码:

int lastIndex = 0;
private void PageChanged(object sender, SelectionChangedEventArgs e)
        {
            switch (MainPivot.SelectedIndex)
            {
                case 0:
                    //Do smth
                    break;
                case 1:
                    //Do smth
                    break;
                case 2:
                    //Do smth
                    break;
                case 3:
                    //Do smth
                    break;
            }
            if (MainPivot.SelectedIndex + 1 == lastIndex)
            {
                MainPivot.SelectedIndex = 0;
            }
            lastIndex = MainPivot.SelectedIndex;
        }

和XAML:

    <Pivot x:Name="MainPivot" SelectionChanged="PageChanged">
        <PivotItem Margin="0" Background="Red">

        </PivotItem>
        <PivotItem Margin="0" Background="#FF0017FF">

        </PivotItem>
        <PivotItem Margin="0" Background="Yellow">

        </PivotItem>
        <PivotItem Margin="0" Background="#FFE800FF">

        </PivotItem>
    </Pivot>

但是UI并没有对

做出反应
MainPivot.SelectedIndex = 0;

正如我所见,在动画结束之前,pivot不会设置页面。

这是另一种在导航完成之前导航到其他PivotItem还是在导航开始之前触发事件的方法?

1 个答案:

答案 0 :(得分:1)

在将索引设置为零之前给出一个小延迟。

    int lastIndex = 0;
private async void PageChanged(object sender, SelectionChangedEventArgs e)
        {
            switch (MainPivot.SelectedIndex)
            {
                case 0:
                    //Do smth
                    break;
                case 1:
                    //Do smth
                    break;
                case 2:
                    //Do smth
                    break;
                case 3:
                    //Do smth
                    break;
            }
            if (MainPivot.SelectedIndex + 1 == lastIndex)
            {
                await Task.Delay(50);
                MainPivot.SelectedIndex = 0;
            }
            lastIndex = MainPivot.SelectedIndex;
        }

我已经await Task.Delay(50);你可以通过减少延迟时间来优化它。