2016-01-21 74 views
1

我有一个ListView与分组。一切工作正常,除了滚动。如果我想向下滚动ListView,那么在释放ListView后可以回到开头。我试图设置ScrollViewer.VerticalScrollModeEnabledScrollViewer.VerticalScrollBarVisibilityAuto。但没有成功。UWP - ListView滚动 - 不会停留在滚动位置

XAML代码:

<PivotItem> 
    <StackPanel Orientation="Vertical" >  
     <TextBox x:Name="SearchBox" 
        PlaceholderText="Search ... " 
        TextChanged="SearchBox_TextChanged"/> 

     <ListView x:Name="ContactsListView" 
        ItemTemplate="{StaticResource ContactsTemplate}" 
        ItemsSource="{x:Bind ContactsViewSource.View}" 
        SelectionMode="Single" 
        ScrollViewer.VerticalScrollMode="Enabled" 
        ScrollViewer.VerticalScrollBarVisibility="Auto" > 

        <ListView.GroupStyle> 
        <GroupStyle> 
         <GroupStyle.HeaderTemplate> 
          <DataTemplate x:DataType="data:GroupingItem"> 
           <TextBlock Text="{x:Bind Key}" 
             Foreground="Blue" 
             Style="{ThemeResource TitleTextBlockStyle}"/> 
          </DataTemplate> 
         </GroupStyle.HeaderTemplate> 
        </GroupStyle> 
        </ListView.GroupStyle> 
     </ListView> 
    </StackPanel> 
</PivotItem> 

你能不能给我一些暗示?因为我搜索了网络,但没有任何解决方案。提前致谢。

回答

5

的解决方案是在与PivotItemGrid取代StackPanel

<PivotItem> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="50" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <TextBox x:Name="SearchBox" 
        PlaceholderText="Search ... " 
        TextChanged="SearchBox_TextChanged" 
        Grid.Row="0"/> 

     <ListView x:Name="ContactsListView" 
        ItemTemplate="{StaticResource ContactsTemplate}" 
        ItemsSource="{x:Bind ContactsViewSource.View}" 
        SelectionMode="Single" 
        Grid.Row="1" > 

        <ListView.GroupStyle> 
        <GroupStyle> 
         <GroupStyle.HeaderTemplate> 
          <DataTemplate x:DataType="data:GroupingItem"> 
           <TextBlock Text="{x:Bind Key}" 
             Foreground="Blue" 
             Style="{ThemeResource TitleTextBlockStyle}"/> 
          </DataTemplate> 
         </GroupStyle.HeaderTemplate> 
        </GroupStyle> 
        </ListView.GroupStyle> 
     </ListView> 
    </Grid> 
</PivotItem> 
+0

非常感谢。我不会想到我自己。 – NSFW

0

如果我要释放的ListView下来后,然后滚动ListView控件可以追溯到上开始

你可以听垂直滚动条的滚动事件,并使用ScrollViewer中以务实的态度调整ScrollBar位置,当它位于底部时。

 var scrollViewer = GetDescendants(ContactsListView).OfType<ScrollViewer>().FirstOrDefault(); 
     var verticalScrollbar = GetDescendants(scrollViewer).OfType<ScrollBar>().FirstOrDefault(x => x.Orientation == Orientation.Vertical); 
     verticalScrollbar.Scroll += (o, e) => 
     { 
      if (e.ScrollEventType != ScrollEventType.EndScroll) 
       return; 

      if (e.NewValue >= verticalScrollbar.Maximum) 
       scrollViewer.ScrollToVerticalOffset(0); // Scroll to the top 
     }; 

以下是可用于浏览ListView可视化树以查找ScrollViewer和Vertical ScrollBar的帮助器类。

public static IEnumerable<DependencyObject> GetDescendants(DependencyObject start) 
    { 
     var queue = new Queue<DependencyObject>(); 
     var count = VisualTreeHelper.GetChildrenCount(start); 

     for (int i = 0; i < count; i++) 
     { 
      var child = VisualTreeHelper.GetChild(start, i); 
      yield return child; 
      queue.Enqueue(child); 
     } 

     while (queue.Count > 0) 
     { 
      var parent = queue.Dequeue(); 
      var count2 = VisualTreeHelper.GetChildrenCount(parent); 

      for (int i = 0; i < count2; i++) 
      { 
       var child = VisualTreeHelper.GetChild(parent, i); 
       yield return child; 
       queue.Enqueue(child); 
      } 
     } 
    }