Wpf 在不同项目控件中匹配垂直布局

Wpf 在不同项目控件中匹配垂直布局,wpf,grid,itemscontrol,itemspanel,Wpf,Grid,Itemscontrol,Itemspanel,我有一个ListView,它使用GridView来显示几列数据 其中两列具有包含ItemControl的单元格模板,以显示每个单元格中的小集合 我的问题是ItemControls的垂直大小没有以任何方式连接,因为它们位于不同的单元格中,因此它们没有对齐 例如:(注意这是父列表视图中的一行) XAML到目前为止: <ListView Margin="6,6,6,0" ItemsSource="{Binding Controllers}"> <ListView.ItemC

我有一个
ListView
,它使用
GridView
来显示几列数据

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

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

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

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>

你好
我的第一个想法是使用网格作为
ItemsControls
ItemsPanel,这样我就可以在行上使用SharedSizeScope来排列它们。但是,我无法将ItemsControl动态创建的项分配给特定的网格行


有人能提出更好的解决方案吗?

通过将
ListView.ItemContainerStyle.VerticalContentAlignment
设置为拉伸,然后对
ItemsControl
面板使用
UniformGrid
,解决了这个问题:

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

乙二醇



你的意思是“水平堆叠面板”不是“垂直”吗?@Phil:对不起,大脑放屁。我是说ItemsControl。编辑过。(考虑stackpanel是因为ItemsControl默认堆叠子项)那么每个blah是否有一种模式?如果是这样的话,为什么视图模型不这样公开它呢?是的,每个模式都有一个空话。我的ViewModel确实是这样公开的(ModeVM有Name和Blah属性,Modes是ModeVM的集合)。我的问题是显示得很好。好吧,现在我很困惑。为什么你的模式栏不显示一种模式呢?然后将细胞垂直居中。
<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>