在ScrollViewer中旋转,ScrollViewer不会滚动
本文关键字:ScrollViewer 滚动 旋转 | 更新日期: 2023-09-27 18:11:32
我有一个页面,它有许多UI元素,并且像时间轴一样可垂直滚动。在中间我有一个枢轴,当它得到焦点或鼠标指针进入滚动查看器停止滚动。
<ScrollViewer x:Name="scrollViewer" VerticalScrollMode="Enabled" HorizontalScrollMode="Disabled">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="90"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition MaxWidth="180"/>
<ColumnDefinition Width="360*" MaxWidth="1060"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<!-- more UI elements-->
<Pivot ScrollViewer.HorizontalScrollMode="Disabled" ScrollViewer.VerticalScrollMode="Disabled" x:Name="InfoPivot" Title="Pivot" Grid.Column="1" Grid.Row="4" VerticalAlignment="Top" MaxWidth="1060" HorizontalAlignment="Left" MinHeight="500">
<PivotItem Header="Mylist">
<GridView x:Name="theList" Margin="20,10,10,13" ItemTemplate="{StaticResource GridViewTemplate1}" VerticalAlignment="Top" HorizontalAlignment="Center"/>
</PivotItem>
</Pivot>
</Grid>
我找到了一个解决方案,但我希望有更好的方法。
编辑:改变分割,使其感觉更像默认滚动。
private void PivotItem_PointerWheelChanged(object sender, PointerRoutedEventArgs e)
{
if (e.GetCurrentPoint(scrollViewer).Properties.MouseWheelDelta == (-120))
{
// On Mouse Wheel scroll Backward
scrollViewer.ChangeView(null, scrollViewer.VerticalOffset + Window.Current.CoreWindow.Bounds.Height / 7, null, false);
}
if (e.GetCurrentPoint(scrollViewer).Properties.MouseWheelDelta == (120))
{
// On Mouse Wheel scroll Forward
scrollViewer.ChangeView(null,scrollViewer.VerticalOffset - Window.Current.CoreWindow.Bounds.Height / 7, null, false);
}
}
文档规定我们不能在ScrollViewer中放置Pivot
不要在滚动查看器中放置Pivot控件,以避免与Pivot的滚动逻辑冲突。
PointerWheelChanged文档说:
特定的Windows运行时控件可能对PointerWheelChanged输入事件有基于类的处理。如果是这样,控件可能有OnPointerWheelChanged方法的重写。通常,事件被标记为由类处理程序处理,并且PointerWheelChanged事件不会引发以供该控件上的任何用户代码处理程序处理。控件可以这样做,以便通过使用指针滚轮操作来支持遍历其子元素。
关于GridView和ListView文档的说明也适用于Pivot
。
PointerWheelChanged事件不会从GridView中冒出来。这意味着,如果控件内部有GridView,则如果指针在GridView上,则不会接收鼠标滚轮更改消息。例如,如果你把GridView放在ScrollViewer中,当鼠标指针在GridView上时,你不能用鼠标滚轮滚动ScrollViewer。