Carousel UWP Microsoft Toolkit отключает прокрутку

Я использую элемент управления Carousel из Microsoft.UWP.Toolkir.Controls https://docs.microsoft.com/en-us/windows/communitytoolkit/controls/carousel

Когда мы нажимаем и удерживаем левую кнопку мыши, мы можем провести пальцем по элементу, как на планшете, пхохе. Это как "панорамная" прокрутка.

Итак, это работает нормально, но когда мы удерживаем и перемещаем указатель (или палец в планшете) на первый и последний элемент, мы получаем белый «фон» (смещение mb) слева (первый элемент), справа (последний элемент) стороны.

Когда мы двигаемся, и элемент получает некоторое (не знаю, как проверить) смещение по горизонтали -> он возвращается в предыдущее состояние.

карусель начального положения

удерживаем и перемещаем первый элемент, влево от него получаем некоторое смещение

Можем ли мы получить и изменить это смещение или отключить эту опцию для первого и последнего элемента?


person Stanislav Zinoviev    schedule 13.11.2018    source источник


Ответы (1)


Можем ли мы получить и изменить это смещение или отключить эту опцию для первого и последнего элемента?

Windows Community Toolkit — это открытый исходный код, вы можете проверить Carousel, исходный код.

Что вы сказали 'когда мы удерживаем и перемещаем указатель (или палец в планшете) на первом и последнем элементе, мы получаем белый "фон" (смещение mb) слева (первый элемент), справа ( последний элемент) стороны.' просто нормально Операция манипулирования. Вы можете увидеть эти операции в CarouselPanel.cs.

Чтобы достичь своей цели, вам нужно сделать суждение в OnManipulationDelta, если выбранный элемент является первым или последним элементом, вы можете завершить манипуляцию следующим образом:

internal void OnManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
    var previousIndex = Carousel.SelectedIndex;
    var delta = Carousel.Orientation == Orientation.Horizontal ? e.Delta.Translation.X : e.Delta.Translation.Y;
    if ((previousIndex == 0 && delta>0)||(previousIndex==Children.Count-1 && delta<0))
    {
        return;
    }
    ........
}

Вышеприведенный код — это моя простая реализация, если вы считаете, что он вам не подходит, вы можете изменить его самостоятельно.

Затем, когда вы измените исходный код в Windows Community Toolkit, вам придется скомпилировать для него собственную версию и добавить ссылку на нее в свой проект.

person Xie Steven    schedule 14.11.2018
comment
Я решил свою основную задачу, создал свою панель и изменил поведение для последнего и первого. Я использую эту панель следующим образом: ‹Setter.Value› ‹ItemsPanelTemplate› ‹carouselViewPanel:CarouselViewPanel›‹/carouselViewPanel:CarouselViewPanel› ‹/ItemsPanelTemplate› ‹/Setter.Value›' После этого прокрутка от первого элемента до 5 элемента (например) инвалид. Не могли бы вы объяснить мне, что происходит? Может я не правильно использую ItemsPanel? - person Stanislav Zinoviev; 15.11.2018
comment
Извините, как я понял, я не могу наследовать CarouselPanel и переопределить метод? - person Stanislav Zinoviev; 16.11.2018
comment
@StanislavZinoviev Вы можете наследовать и переопределять его методы, если есть методы, которые вы можете переопределить. - person Bite; 16.11.2018
comment
@Bite Я изучил исходный код, и эти методы не переопределены (у них нет переопределенного мода), и у них есть внутренний мод, поэтому я не могу использовать в своем собственном классе, даже если я наследую CarouselPanel. - person Stanislav Zinoviev; 16.11.2018