在ScrollViewer中滚动,滚动查看器不会滚动

问题描述:

我有一个页面,它有许多UI元素,它的滚动垂直像时间轴。在中间我有一个支点,当它获得焦点或鼠标指针进入scrollviewer停止滚动。在ScrollViewer中滚动,滚动查看器不会滚动

<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); 
    } 
} 
+0

这似乎工作,但似乎没有海岸或有加速度。你有没有找到更好的方法来解决这个问题? –

+0

@BobBurningham在我修好之后,Nope还没有投入任何时间,它进入了我的优先事项的底部。 – Stamos

documentation规定,我们不把一个Pivot一个ScrollViewer内。

请勿在滚动查看器中放置Pivot控件以避免与数据透视表的滚动逻辑冲突。

PointerWheelChanged医生说:

特定的Windows运行时控制可能有基于类的处理为PointerWheelChanged输入事件。如果是这样,该控件可能会覆盖方法OnPointerWheelChanged。通常,事件被标记为由类处理程序处理,并且PointerWheelChanged事件不会引发该控件上的任何用户代码处理程序处理。控件可能会这样做,以便通过使用指针轮操作来支持遍历其子元素。

关于GridViewListView的说明文档也适用于Pivot

PointerWheelChanged事件不会从GridView中冒出来。这意味着如果指针位于GridView上,那么其中包含GridView的控件不会收到鼠标滚轮更改消息。例如,如果将一个GridView放入一个ScrollViewer中,则当指针位于GridView上时,不能用鼠标滚轮滚动ScrollViewer。