使用ListView.ItemsPanel中的StackPanel进行对齐问题

时间:2016-11-08 15:22:39

标签: c# wpf xaml listview layout

我希望展示一组横向进行的球队,每支球队的球员都会失败。为了实现这一点,我有一个ListView(lvwTeams)绑定到一组团队。我将lvwTeams.ItemsPanel更改为StackPanel,其方向设置为Horizo​​ntal。 ItemTemplate被更改为包含另一个ListView(lvwPlayers),它绑定到团队的Players集合。

一切正常,但ItemTemplate中定义的控件出现在StackPanel的中间。有什么方法可以让lblTeamName位于顶部,lvwPlayers位于此下方,但填充StackPanel给出的剩余区域?

这是XAML:

 <ListView x:Name="lvwTeams" Grid.Row="1" Grid.Column="1" ItemsSource="{Binding Teams}">
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal"></StackPanel>
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>

    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <Label x:Name="lblTeamName" Grid.Row="0" Content="{Binding Name}"/>
                <ListView x:Name="lvwPlayers" Grid.Row="1" ItemsSource="{Binding Players}" >
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <Label Content="{Binding FullName}"/>
                        </DataTemplate>
                    </ListView.ItemTemplate>

                </ListView>
            </Grid>

        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

非常感谢您的任何帮助。

1 个答案:

答案 0 :(得分:1)

尝试将拉伸放在ListView的内容上,如下所示:

        <ListView x:Name="lvwTeams" 
              Grid.Row="1" 
              Grid.Column="1" 
              ItemsSource="{Binding Teams}"
              HorizontalContentAlignment="Stretch" 
              VerticalContentAlignment="Stretch">

*放在网格的第二行,以拉伸第二个ListView。

<ListView.ItemTemplate>
     <DataTemplate>
         <Grid>
           <Grid.RowDefinitions>
               <RowDefinition Height="Auto"/>
               <RowDefinition Height="*"/>
           </Grid.RowDefinitions>