0

我有ListView使用 aGridView来显示几列数据。

其中两列具有包含ItemControl's 的单元格模板,以在每个单元格中显示一个小集合。

我遇到的问题是 s 的垂直大小ItemControl没有以任何方式连接,因为它们位于不同的单元格中,因此它们没有对齐。

例如:(注意这是列表视图中的一行)

到目前为止的 XAML:

<ListView Margin="6,6,6,0" ItemsSource="{Binding Controllers}">
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem" >
            <Setter Property="VerticalContentAlignment" Value="Top" />
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.View>
        <GridView>

         <!-- snip other columns -->

        <GridViewColumn Header="Mode">
             <GridViewColumn.CellTemplate>
                 <DataTemplate>
                    <ItemsControl ItemsSource="{Binding Modes}" DisplayMemberPath="Name"/>   
                 </DataTemplate>
             </GridViewColumn.CellTemplate>
        </GridViewColumn>

        <GridViewColumn Header="Parameters">
            <GridViewColumn.CellTemplate>
                <DataTemplate>
                    <ItemsControl ItemsSource="{Binding Modes}">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock  Text="Blah:" Margin="5,0"/>
                                    <ComboBox>
                                        <ComboBoxItem>Hello</ComboBoxItem>
                                    </ComboBox>
                                 </StackPanel>
                             </DataTemplate>
                         </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </DataTemplate>
            </GridViewColumn.CellTemplate>
        </GridViewColumn>
    </GridView>
    </ListView.View>
</ListView>

我的第一个想法是使用网格作为ItemsPanelItemsControls所以我可以在行上使用 SharedSizeScope 来排列它们。但是,我看不到将 ItemsControl 动态创建的项目分配给特定 Grid 行的方法。

任何人都可以提出更好的解决方案吗?

4

1 回答 1

0

设法通过设置为 Stretch 来解决此问题ListView.ItemContainerStyle.VerticalContentAlignment,然后在面板中使用UniformGrid's :ItemsControl

现在,每个单元格都垂直拉伸以匹配最大的单元格,并UniformGrid为每个项目均匀地分割垂直大小。

例如

<GridViewColumn Header="Mode">
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <ItemsControl ItemsSource="{Binding Modes}" DisplayMemberPath="Name">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <UniformGrid Columns="1"/>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
            </ItemsControl>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>
于 2012-04-05T12:47:13.383 回答