c# - 在 UWP 的另一个响应式容器中,在 C# 中创建多个带有滚动条的 ListView
问题描述
我在 Xaml 中有一个容器(目前是 StackPanel,我知道这不是最好的,但对我来说唯一可以正常工作的东西)。在该容器内,我需要在 cs 文件中创建未定义数量的列表(最多 10 个)。问题是,当列表很长时,它们没有滚动条,除非我限制了 StackPanel 的高度,但这限制了应用程序的响应能力。使用 Grid 也有问题,因为我需要容器来处理每个新创建的 ListView 的放置。我也看到了相关的解决方案,但它们总是引用 Xaml 而不是 C# 中的视图列表。
我的 Xaml 代码:
<Grid VerticalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<StackPanel Name ="sensorDataStackPanel" Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Top">
<ComboBox x:Name="sensorComboBox" PlaceholderText="Pick sensor" ItemsSource="{x:Bind Path=sensors_collection}"
SelectionChanged="SensorComboBox_SelectionChanged"/>
<StackPanel Name="AxiseslistViewStackPanel" Orientation="Horizontal" MaxHeight="300"/>
</StackPanel>
</Grid>
C# 代码 --> 当用户在 ComboBox 中选择传感器时,会在 StackPanel 中相应地创建列表:
public sealed partial class Layout_Tab : Page
{
public ObservableCollection<Sensor> sensors_collection;
public ObservableCollection<Axis> axises;
.......
private void SensorComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox comboBox = sender as ComboBox;
Sensor chosen_sensor = (Sensor)comboBox.SelectedItem;
axises = chosen_sensor.axisesList;
this.AxiseslistViewStackPanel.Children.Clear();
foreach(var axis in axises)
{
ListView listView = new ListView { Header = axis.AxisName, SelectionMode = ListViewSelectionMode.Multiple,
ShowsScrollingPlaceholders =true, CanBeScrollAnchor = true};
foreach(var antenna in axis.inUseAntennaList)
{
listView.Items.Add(antenna);
}
this.AxiseslistViewStackPanel.Children.Add(listView);
}
}
}
这是一张定义了 StackPanel 高度的图片:
谢谢大家
编辑:更改为 GridView 后仍然得到相同的结果:
<GridView Name="AxiseslistViewStackPanel" ItemsSource="{x:Bind axises}">
<GridView.ItemTemplate>
<DataTemplate x:DataType="tests:Axis">
<StackPanel>
<TextBlock Text="{x:Bind AxisName}"/>
<ListView ItemsSource="{x:Bind inUseAntennaList}" ScrollViewer.VerticalScrollMode="Enabled" ScrollViewer.IsVerticalRailEnabled="True" ScrollViewer.VerticalScrollBarVisibility="Visible"/>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
解决方案
之所以ListView
可以滚动,是因为它们有一个ScrollViewer
内部。当您将 aListView
放在 parent 内部时StackPanel
,如果ListView
高度大于视口,则父面板将成为ListView
. 您可以通过获取 StackPanel 和ActualHeight
listview 项目单击方法来验证这一点。这就是为什么列表视图在固定ListView
高度时起作用的原因。
修复很简单:将父布局面板放在ScrollViewer
.
<ScrollViewer>
<StackPanel Name="RootLayout" >
<Button
VerticalAlignment="Top"
Click="Button_Click"
Content="AddListView"
/>
</StackPanel>
</ScrollViewer>
推荐阅读
- mosquitto - Mosquitto Auth 插件通配符主题不起作用
- c# - 为 SyndicationFeed 标题使用与 Richtextbox 中的摘要不同的字体 - C#
- php - How to remove a specific number from string in PHP
- laravel-5 - 如何允许访客用户查看帖子,而无需登录
- ruby-on-rails - “在此操作中多次调用渲染和/或重定向”设计
- python - How to display one image after another using .after()
- vapor - 如何根据主机只公开一些路由
- google-cloud-platform - 使用 Compute Engine 构建 Google 云
- docker - 当其中一台服务器关闭时,Consul 集群无法正常工作
- python - 无法安装 python-flask