【问题标题】:Carousel UWP Microsoft Toolkit disable swipeCarousel UWP Microsoft Toolkit 禁用滑动
【发布时间】:2018-11-13 08:58:22
【问题描述】:

我使用来自 Microsoft.UWP.Toolkir.Controls 的轮播控件 https://docs.microsoft.com/en-us/windows/communitytoolkit/controls/carousel

当我们点击并按住鼠标左键时,我们可以像平板电脑一样滑动项目,phohe。这就像“全景”滚动。

所以,它可以正常工作,但是当我们在第一个和最后一个项目上按住并移动指针(或平板电脑中的手指)时,我们会得到左边(第一个项目)、右边(最后一项)双方。

当我们移动并且项目得到一些(我不知道如何检查)水平偏移时 -> 它会回到以前的状态。

start position carousel view

we hold and move first item, left of it we get some offset

我们可以在第一个和最后一个项目上获取和更改此偏移量或禁用此选项吗?

【问题讨论】:

    标签: uwp carousel swipe offset toolkit


    【解决方案1】:

    我们可以获取和更改此偏移量或禁用第一个和最后一个项目的此选项吗?

    Windows Community Toolkit是开源的,你可以查看Carousel源代码。

    您所说的 '当我们在第一个和最后一个项目上按住并移动指针(或平板电脑中的手指)时,我们会得到左侧(第一个项目)的白色“背景”(mb 偏移) ,右侧(最后一项)两侧。' 只是正常的Manipulation 操作。你可以在CarouselPanel.cs看到这些操作。

    要达到你的目标,你需要在OnManipulationDelta做判断,如果选中的item是第一个或最后一个item,你可以像下面这样终止Manipulation:

    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 社区工具包中的源代码时,您必须为其编译自定义版本并在项目中添加对它的引用。

    【讨论】:

    • 我解决了我的主要任务,创建了自己的面板并改变了最后和第一个的行为。我像这样使用这个面板: ' 从第一个项目滚动到第 5 个项目(例如)之后禁用。你能解释一下“发生了什么吗?”。可能是我没有正确使用 ItemsPanel?
    • 对不起,我可以理解我不能继承 CarouselPanel 和覆盖方法?
    • @StanislavZinoviev 你可以继承并覆盖它的方法,如果有方法可以覆盖的话。
    • @Bite 我研究了源代码,这些方法不是overidde(它们没有overidde mod)并且它们有内部mod,所以如果我我不能在我自己的班级中使用甚至继承 CarouselPanel。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2019-12-16
    相关资源
    最近更新 更多