水平单行 Scrolling/Swipeable GridView
Single Row Horizontally Scrolling/Swipeable GridView
我想要一个单行 GridView,它可以通过鼠标和触摸滑动来水平滚动。 GridView就是通过绑定来呈现图片,从图片数组中选择单张图片。
一切正常(绑定、图像选择等),除了水平滚动不起作用。 XAML代码如下所示。
我错过了什么?
<GridView x:Name="IconGridView"
Grid.Row="0"
Margin="8,12"
DataContext="{x:Bind IconManagerObj}"
DoubleTapped="{x:Bind IconGridView_DoubleTapped}"
IsItemClickEnabled="True"
IsSwipeEnabled="True"
ItemsSource="{Binding Path=IconImageInfo}"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollMode="Enabled"
ScrollViewer.VerticalScrollMode="Disabled"
SelectionMode="Single"
Tapped="{x:Bind IconGridView_Tapped}">
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid Orientation="Horizontal" />
</ItemsPanelTemplate>
</GridView.ItemsPanel>
<GridView.ItemTemplate>
<DataTemplate>
<StackPanel Margin="4,8"
HorizontalAlignment="Center"
BorderBrush="{ThemeResource SubtleBlueBrush}"
BorderThickness="1">
<Image Width="150" Source="{Binding IconImage}Stretch="Uniform"/>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
您一切都正确,但 ItemsWrapGrid 的 Orientation 必须 Vertical 才能拥有 Horizontal ScrollViewer。
此处的文档 https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.itemswrapgrid.aspx 解释说:
当值为垂直时,网格从上到下在列中添加项目,然后从左到右换行。项目列水平滚动或平移。
Juan Pablo Garcia Coello 的回答让我走上了正确的轨道,但没有额外的设置就无法工作。我通过试用发现的关键是为 GridView 设置 Height。
- 高度 必须设置得足以让单行元素显示 但 不够高以允许第二行。对于 100 的图像高度,我将其任意设置为 140 并且效果很好。
ScrollViewer.VerticalScrollMode
必须 禁用
ScrollViewer.HorizontalScrollMode
必须是 Auto 或 Enabled
ScrollViewer.HorizontalScrollBarVisibility
必须是 Auto 或 Enabled
- 最关键的是,正如 Juan 指出的那样,
ItemsWrapGrid Orientation
必须是 Vertical(听起来违反直觉但有效!)
我已将 Juan 的答案标记为已回答,因为它提供了完整的答案,因为如果不将方向设置为垂直,我无法快速找到完整的答案——这是一种相当违反直觉的做法设置如果你问我但现在我明白了。
我想要一个单行 GridView,它可以通过鼠标和触摸滑动来水平滚动。 GridView就是通过绑定来呈现图片,从图片数组中选择单张图片。
一切正常(绑定、图像选择等),除了水平滚动不起作用。 XAML代码如下所示。
我错过了什么?
<GridView x:Name="IconGridView"
Grid.Row="0"
Margin="8,12"
DataContext="{x:Bind IconManagerObj}"
DoubleTapped="{x:Bind IconGridView_DoubleTapped}"
IsItemClickEnabled="True"
IsSwipeEnabled="True"
ItemsSource="{Binding Path=IconImageInfo}"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollMode="Enabled"
ScrollViewer.VerticalScrollMode="Disabled"
SelectionMode="Single"
Tapped="{x:Bind IconGridView_Tapped}">
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid Orientation="Horizontal" />
</ItemsPanelTemplate>
</GridView.ItemsPanel>
<GridView.ItemTemplate>
<DataTemplate>
<StackPanel Margin="4,8"
HorizontalAlignment="Center"
BorderBrush="{ThemeResource SubtleBlueBrush}"
BorderThickness="1">
<Image Width="150" Source="{Binding IconImage}Stretch="Uniform"/>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
您一切都正确,但 ItemsWrapGrid 的 Orientation 必须 Vertical 才能拥有 Horizontal ScrollViewer。
此处的文档 https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.itemswrapgrid.aspx 解释说:
当值为垂直时,网格从上到下在列中添加项目,然后从左到右换行。项目列水平滚动或平移。
Juan Pablo Garcia Coello 的回答让我走上了正确的轨道,但没有额外的设置就无法工作。我通过试用发现的关键是为 GridView 设置 Height。
- 高度 必须设置得足以让单行元素显示 但 不够高以允许第二行。对于 100 的图像高度,我将其任意设置为 140 并且效果很好。
ScrollViewer.VerticalScrollMode
必须 禁用ScrollViewer.HorizontalScrollMode
必须是 Auto 或 EnabledScrollViewer.HorizontalScrollBarVisibility
必须是 Auto 或 Enabled- 最关键的是,正如 Juan 指出的那样,
ItemsWrapGrid Orientation
必须是 Vertical(听起来违反直觉但有效!)
我已将 Juan 的答案标记为已回答,因为它提供了完整的答案,因为如果不将方向设置为垂直,我无法快速找到完整的答案——这是一种相当违反直觉的做法设置如果你问我但现在我明白了。