0

我已经设置了一个ListBoxwhere the items are another ListBox。这允许我绑定一个包含列表的可观察集合。

我使用水平StackPanel作为ItemsPanelTemplate第二个ListBox,但它很难看,所以我尝试使用 aGrid代替(目前我固定了列数以测试一切是否正常)。

一切都在正确的单元格中,但看起来SharedSizeGroup没有考虑到,我想要的是相同列的单元格具有相同的宽度(最宽的元素之一)

查看我的 XAML 代码发生的情况的图片:

内部 ListBox 的项目不共享大小组。

以及我想要达到的目标

内部 ListBox 的项目共享大小组并对齐。

我认为我没有将其放置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>
4

1 回答 1

1

ListBox您有一个包含本身是 es 的项目的外部项目,ListBox这些项目具有Gridas ItemsPanel。这Grid定义了共享大小组。将Grid.IsSharedSizeScope="True"附加属性放在内部ListBox不起作用,因为此范围仅包含一个项目 Grid面板。现在的方式意味着每个内部ListBox都有自己 Grid的项目面板定义自己的共享大小范围,这不会影响其他人。如果你有一个ItemTemplate包含 a的例子,这将起作用,因为那时共享大小范围内的每个项目都将成为目标GridListBox

这也意味着您的问题的解决方案,只需将共享大小范围声明移动到外部ListBox,这是包含所有内部ListBoxes 和它们Grid的范围的范围。

<ListBox Grid.Row="1"
         ItemsSource="{Binding LibraryGroupedValuesList}"
         SelectedItem="{Binding SelectedGroupedValues}"
         Grid.IsSharedSizeScope="True">
于 2022-02-22T18:31:27.727 回答