当前位置: 首页 > 编程语言 > C#

ListView的水平滚动分享

时间:2023-04-10 16:26:58 C#

ListView的水平滚动我目前正在捕获页面上的PointerMoved事件以使用水平菜单。因此用户可以向左/向右滑动,页面将相应地进行动画处理。这在用户触摸静态元素(TextBlock等)时有效,但如果他们触摸ListView,则会捕获触摸事件。我如何实现ListView,以便当用户垂直滚动时,它可以正常工作,但当用户水平滚动时,它会将事件传递给我的代码?这是可能的,但你需要一个小技巧。作为参考,我将RobCaplan的文章放在这里。让我们开始吧:首先-您的活动在哪里?–答案很简单–当您启用ScrollViewer时,所有事件都会被它拦截和处理。ListView只会获取PointerEntered事件,而在PointerExited上,所有进一步的处理都由ScrollViewer处理。那就是问题所在。但正如我所说,有一种方法可以做你想做的事。为此,假设您只使用VerticalScroll定义了ListView:当然它可以针对两个方向完成,但这是一个简单的示例。现在让我们看一下Page构造函数:PointerPointfirstPoint=null;滚动查看器listScrollviewer=null;publicMainPage(){this.InitializeComponent();myList.ItemsSource=yourItemSource;myList.PointerEntered+=myList_PointerEntered;myList.PointerMoved+=myList_PointerMoved;这里没有什么奇怪的——我只是订阅了事件并声明了两个变量firstPoint和listScrollviewer,稍后我会用到它们。我们还需要获取ListView的ScrollViewer——以下方法将完成这项工作:for(inti=0;iNow-要启用我们的活动,我们需要禁用ScrollViewer:Disabled;returnfoundOne;}我们将禁用PointerScrollViewer事件...在此步骤中,我们还记得按下的PointerPoint-因为我们禁用了Scrollviewer,所以我们将不得不手动滚动它-这就是我们需要此PointerPoint的原因。privatevoidmyList_PointerEntered(objectsender,PointerRoutedEventArgse){firstPoint=e.GetCurrentPoint(myList);如果(listScrollviewer==null)listScrollviewer=DisableScrolling(myList);}最后是我们的PointerMoved事件,现在我们已经禁用了ScrollViewer-移动ScrollViewer+您需要放置的其他代码:;doubleverticalDifference=secondPoint.Position.Y-firstPoint.Position。是;listScrollviewer.ChangeView(null,listScrollviewer.VerticalOffset-verticalDifference,null);}//你需要的一些其他代码}几句话:我还在OneDrive上放了一个简单的工作示例。以上就是C#学习教程的全部内容:ListView的水平滚动。如果对您有用,需要了解更多C#学习教程,希望您多多关注---本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: