以网格作为 ItemPanelTemplate 的列表框:SharedSizeGroup 的问题

Listbox with Grid as ItemPanelTemplate: Problem with SharedSizeGroup

我设置了一个 ListBox,其中的项目是另一个 ListBox。 这允许我绑定一个包含列表的可观察集合。

我使用水平 StackPanel 作为第二个 ListBoxItemsPanelTemplate 但是它很丑所以我尝试使用 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>

您有一个外部 ListBox,其中包含本身为 ListBox 的项目,其 GridItemsPanelGrid 定义了共享尺寸组。将 Grid.IsSharedSizeScope="True" 附加的 属性 放在内部 ListBox 上是行不通的,因为这个范围只包含一个 单个 Grid,项目控制板。现在的方式意味着每个内部 ListBox 及其 own Grid 作为项目面板定义其自己的共享大小范围,这不会影响其他。如果您有例如,这将起作用一个 ItemTemplate 包含一个 Grid,从那时起每个项目 inside ListBox,因此 inside 共享大小范围将被定位。

这也暗示了您问题的解决方案,只需将共享大小范围声明移动到外部 ListBox,这是包含所有内部 ListBoxes 和它们的 [=13= 的范围]s.

<ListBox Grid.Row="1"
         ItemsSource="{Binding LibraryGroupedValuesList}"
         SelectedItem="{Binding SelectedGroupedValues}"
         Grid.IsSharedSizeScope="True">