Как остановить круговую петлю - PullRequest
9 голосов
/ 06 октября 2011

Я хочу создать мастер-элемент управления из сводного элемента управления.Чтобы добиться этого, мне нужно остановить цикл.Я хочу, чтобы поворотный элемент управления не двигался от последнего элемента к первому и обратно от первого к последнему.

Я почти уверен, что смогу перехватить манипуляции, например, отменить, если обнаружуманипулирование справа налево на последнем элементе поворота.Я могу захватить это в ManipulationDelta, но не знаю, как отменить манипуляцию.

Я попытался установить e.Handled = True, но это не сработало.

Я попытался установить IsHitTestVisisble в false, но это убивает все манипуляции.Я попытался установить его обратно в true в ManipulationCompleted, но тогда он позволяет все манипуляции.

Ответы [ 6 ]

5 голосов
/ 06 октября 2011

Сводная таблица не предназначена для использования в качестве мастера и не поддерживает остановку циклического поведения, так как это может создать противоречивый пользовательский интерфейс для пользователей.

Если вам действительно нужно создать мастера, сделайте это с несколькими страницами.

3 голосов
/ 06 октября 2011

Не используйте Pivot для Wizard. Вместо этого создайте свои собственные переходы.

2 голосов
/ 14 октября 2011

Я не смог ответить на ваш комментарий к ответу Мэтта, но я просто хотел указать вам на это: http://forty3degrees.wordpress.com/2011/07/19/creating-a-swipable-contentcontrol/

Это последняя запись в моем очень запущенном блоге, которая должна послужить хорошей основой для созданиямастер, использующий движение в стиле сводной оси.

Calum.

РЕДАКТИРОВАТЬ: Я пытался сделать то, что вы хотели с помощью сводной, но не смог найти способ остановить его зацикливание.Единственный способ достичь этого - это получить пользовательский элемент управления из Pivot.К сожалению, SelectedIndex / SelectedItem не являются виртуальными, поэтому вам нужно их скрыть (с новым модификатором) и воспроизвести логику из базового класса.

1 голос
/ 08 мая 2014

Это просто альтернативное решение, которое я разместил здесь - вы можете попробовать использовать платформу XNA TouchPanel и Touch.FrameReported Event :

using Microsoft.Xna.Framework.Input;

public MainPage()
{
   InitializeComponent();
   myPivot.IsHitTestVisible = false; // disable your Pivot
   Touch.FrameReported += Touch_FrameReported;
   TouchPanel.EnabledGestures = GestureType.HorizontalDrag; 
}

TouchPoint first;

private void Touch_FrameReported(object sender, TouchFrameEventArgs e)
{
    TouchPoint mainTouch = e.GetPrimaryTouchPoint(this);
    if (mainTouch.Action == TouchAction.Down)
        first = mainTouch;
    else if (mainTouch.Action == TouchAction.Up && TouchPanel.IsGestureAvailable)
    {
        if (mainTouch.Position.X < first.Position.X)
        {
            if (myPivot.SelectedIndex < myPivot.Items.Count - 1)
                myPivot.SelectedIndex++;
        }
        else if (mainTouch.Position.X > first.Position.X)
        {
            if (myPivot.SelectedIndex > 0)
                myPivot.SelectedIndex--;
        }
    }
}

Возможно, он будет работать в WP7.1, поскольку TouchPanel доступен из этой версии ОС.

0 голосов
/ 08 января 2015

Это так странно, потому что работает только в эмуляторе. Я полагаю, вы не будете связываться с пользовательским интерфейсом

Вы можете использовать MVVM:

<phone:Pivot Foreground="Black"
                 Name="pivot1"
                 Title="AIDE"
                 SelectedIndex="{Binding SelectedItem, Mode=TwoWay}">

Cs:

    private class HelpViewModel : ViewModelBase
    {
        public HelpViewModel()
        {

        }

        private int _SelectedItem = 0;
        public int SelectedItem
        {
            get
            {
                return _SelectedItem;
            }
            set
            {
                if (_SelectedItem != value)
                {
                    if (value == 3)
                        _SelectedItem = 0;
                    else
                        _SelectedItem = value;
                    RaisePropertyChanged(() => SelectedItem);
                }
            }
        }
    }


    public AppHelpPivot()
    {
        InitializeComponent();
        LayoutRoot.DataContext = new HelpViewModel();
    }
0 голосов
/ 26 апреля 2013

Если вы абсолютно хотите, чтобы Pivot не зацикливался, вот быстрый и грязный хак:

 int previousSelectedIndex = 0;

    public PageWithPivot()
    {
        InitializeComponent();
        pivot.SelectionChanged += new SelectionChangedEventHandler(pivot_SelectionChanged); 
    }


    private void pivot_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {

        if (pivot.SelectedIndex == 0 && previousSelectedIndex == <number Of screens - 1>)
            pivot.SelectedIndex = <number Of screens - 1>;
        previousSelectedIndex = pivot.SelectedIndex;
    }

Это заставляет ваш PivotControl возвращаться к последнему pivotItem. Не очень красиво, но работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...