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>