积极答复者
listView中item的宽高无法动态改变问题?

问题
-
在使用 listView控件时,在同一个group下,每一个item的高度都是和第一个item相同,但是我item布局的写法是自适应的,求指导!
<ListView
x:Name="detailGridView"
ItemsSource="{Binding Source={StaticResource groupedItemsViewSource}}"
ItemTemplate="{Binding Source={StaticResource baseParTemplate}}" SelectionMode="None"
IsItemClickEnabled="False"
Margin="0,8,0,0"
>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<Grid Width="370" >
<Grid Background="LightGray" Margin="10,0,10,0" Height="50">
<TextBlock FontSize="24" Text="{Binding Head}" HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
</Grid>
</DataTemplate>
</GroupStyle.HeaderTemplate>
<GroupStyle.Panel>
<ItemsPanelTemplate>
<VariableSizedWrapGrid Margin="0,0,0,0" />
</ItemsPanelTemplate>
</GroupStyle.Panel>
</GroupStyle>
</ListView.GroupStyle>
</ListView >这是item的布局
<Grid Width="370" MinHeight="50" Background="White">
<Grid Margin="20,0,8,0">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="1"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding ParKey}" FontSize="16" Width="100" TextTrimming="WordEllipsis" TextWrapping="Wrap" VerticalAlignment="Center" HorizontalAlignment="Left" Foreground="#FF999999" Margin="0,0,30,0" />
<TextBlock Text="{Binding ParText}" MaxWidth="195" FontSize="16" TextTrimming="WordEllipsis" TextWrapping="Wrap" VerticalAlignment="Center" HorizontalAlignment="Left" Foreground="#FF333333" />
</StackPanel>
<Grid Grid.Row="1" Background="LightGray"/>
</Grid>
</Grid>- 已编辑 alvinli87 2013年3月5日 10:13
答案
-
楼主的组内容器使用错误,
不能使用VariableSizedWrapGrid ,这个容器是用来平铺视图下的,而且这个容器所有的item的长宽都与第一个相同(通过一些selector可以比例设置)
<GroupStyle.Panel>
<ItemsPanelTemplate>
<VariableSizedWrapGrid Margin="0,0,0,0" />
</ItemsPanelTemplate>
</GroupStyle.Panel>而应该是
<GroupStyle.Panel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Margin="0,0,0,0" />
</ItemsPanelTemplate>
</GroupStyle.Panel>人生就要精彩
- 已建议为答案 boypig 2013年3月12日 2:56
- 已标记为答案 Aaron XueModerator 2013年3月27日 9:08
全部回复
-
我看了一下你的代码,没有明显的错误,一下是我试验的结果。
<Page.Resources> <DataTemplate x:Key="ListViewData"> <Grid Width="370" MaxHeight="200" HorizontalAlignment="Left" Background="White"> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="1"/> </Grid.RowDefinitions> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding}" MaxWidth="195" FontSize="16" TextTrimming="WordEllipsis" TextWrapping="Wrap" VerticalAlignment="Center" HorizontalAlignment="Left" Foreground="#FF333333" /> </StackPanel> <Grid Grid.Row="1" Background="LightGray"/> </Grid> </DataTemplate> </Page.Resources> <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <ListView x:Name="detailGridView" ItemTemplate="{StaticResource ListViewData}" IsItemClickEnabled="False" Margin="0,8,0,0"> </ListView> </Grid>
后端直接绑定
List<String> data = new List<string>(); data.Add("在此页将要在 Frame 中显示时进行调用。"); data.Add("在此页将要在 Frame 中显示时进行调用。在此页将要在 Frame 中显示时进行调用"); data.Add("在此页将要在 Frame 中显示时进行调用。在此页将要在 Frame 中显示时进行调用在此页将要在 Frame 中显示时进行调用"); data.Add("在此页将要在 Frame 中显示时进行调用。在此页将要在 Frame 中显示时进行调用在此页将要在 Frame 中显示时进行调用在此页将要在 Frame 中显示时进行调用"); detailGridView.ItemsSource = data;
最后结果:ListView可以根据文字多少来调整Item的高度,因此我建议你先把分组去掉,直接绑定数据,,看看结果,然后再排除原因。
专注Windows Phone开发
-
楼主的组内容器使用错误,
不能使用VariableSizedWrapGrid ,这个容器是用来平铺视图下的,而且这个容器所有的item的长宽都与第一个相同(通过一些selector可以比例设置)
<GroupStyle.Panel>
<ItemsPanelTemplate>
<VariableSizedWrapGrid Margin="0,0,0,0" />
</ItemsPanelTemplate>
</GroupStyle.Panel>而应该是
<GroupStyle.Panel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Margin="0,0,0,0" />
</ItemsPanelTemplate>
</GroupStyle.Panel>人生就要精彩
- 已建议为答案 boypig 2013年3月12日 2:56
- 已标记为答案 Aaron XueModerator 2013年3月27日 9:08