我已经设置了一个ListBox,其中的项目是另一个ListBox。这允许我绑定包含列表的可观察集合。
我使用了一个水平的StackPanel作为第二个ListBox的ItemsPanelTemplate,但是它很难看,所以我尝试使用Grid (目前我确定了列的数量,以测试是否一切正常)。
所有内容都在正确的单元格中,但是看起来没有考虑到SharedSizeGroup,我想要的是相同列的单元格具有相同的宽度(最宽的元素之一)。
请参阅我的XAML代码正在发生的情况:

我想要达到的目标

我认为我没有将Grid.IsSharedSizeScope="True"放在正确的位置,或者我做了其他错误的事情。
我知道现在这看起来像一个DataGrid,但是在接下来的步骤中,一些行可能没有相同数量的项。
XAML码
<ListBox Grid.Row="1" ItemsSource="{Binding LibraryGroupedValuesList}"
SelectedItem="{Binding SelectedGroupedValues}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Position}" VerticalAlignment="Center">
</TextBlock>
<ListBox Grid.IsSharedSizeScope="True" Grid.Column="1" ItemsSource="{Binding PositionValues}"
ItemTemplateSelector="{StaticResource VariableTypeTemplateSelector}"
HorizontalContentAlignment="Stretch" >
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" SharedSizeGroup="1"></ColumnDefinition>
<ColumnDefinition Width="auto" SharedSizeGroup="2"></ColumnDefinition>
<ColumnDefinition Width="auto" SharedSizeGroup="3"></ColumnDefinition>
<ColumnDefinition Width="auto" SharedSizeGroup="4"></ColumnDefinition>
<ColumnDefinition Width="auto" SharedSizeGroup="5"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Style.Setters>
<Setter Property="Grid.Column" Value="{Binding Index}"/>
</Style.Setters>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>发布于 2022-02-22 18:31:27
您有一个外部ListBox,它包含本身为ListBoxes的项,其中有一个Grid作为ItemsPanel。此Grid定义共享大小组。将Grid.IsSharedSizeScope="True"附加的属性放置在内部ListBox上不起作用,因为这个作用域只包含一个单个 Grid,即items面板。它现在的方式意味着每个内部ListBox都有自己的自带的 Grid作为项面板,定义了自己的共享大小范围,这不影响其他内容。如果您有一个包含一个ItemTemplate的Grid,那么这是可行的,因为那样的话,ListBox中的每一项以及共享大小范围内的每一项都将成为目标。
这也意味着解决您的问题,只需将共享大小范围声明移到外部ListBox,即包含所有内部ListBoxes和它们的Grid的作用域。
<ListBox Grid.Row="1"
ItemsSource="{Binding LibraryGroupedValuesList}"
SelectedItem="{Binding SelectedGroupedValues}"
Grid.IsSharedSizeScope="True">https://stackoverflow.com/questions/71225070
复制相似问题