none
listView中item的宽高无法动态改变问题? RRS feed

  • 问题

  • 在使用  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>


    2013年3月5日 10:12

答案

  • 楼主的组内容器使用错误,

    不能使用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>


    人生就要精彩

    2013年3月11日 9:45

全部回复

  • 这个不一样,你说的这个只是可以按倍数来指定不同的布局,而我的需求是同一个布局,而且我item的布局里面的高度是自适应的,就是说有多少文字就输出多少文字。
    2013年3月5日 10:26
  • 我看了一下你的代码,没有明显的错误,一下是我试验的结果。

    <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开发

    2013年3月6日 9: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>


    人生就要精彩

    2013年3月11日 9:45