首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将网格作为ItemPanelTemplate的Listbox : SharedSizeGroup的问题

将网格作为ItemPanelTemplate的Listbox : SharedSizeGroup的问题
EN

Stack Overflow用户
提问于 2022-02-22 16:41:06
回答 1查看 55关注 0票数 0

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

我使用了一个水平的StackPanel作为第二个ListBoxItemsPanelTemplate,但是它很难看,所以我尝试使用Grid (目前我确定了列的数量,以测试是否一切正常)。

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

请参阅我的XAML代码正在发生的情况:

我想要达到的目标

我认为我没有将Grid.IsSharedSizeScope="True"放在正确的位置,或者我做了其他错误的事情。

我知道现在这看起来像一个DataGrid,但是在接下来的步骤中,一些行可能没有相同数量的项。

XAML码

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-22 18:31:27

您有一个外部ListBox,它包含本身为ListBoxes的项,其中有一个Grid作为ItemsPanel。此Grid定义共享大小组。将Grid.IsSharedSizeScope="True"附加的属性放置在内部ListBox上不起作用,因为这个作用域只包含一个单个 Grid,即items面板。它现在的方式意味着每个内部ListBox都有自己的自带的 Grid作为项面板,定义了自己的共享大小范围,这不影响其他内容。如果您有一个包含一个ItemTemplateGrid,那么这是可行的,因为那样的话,ListBox中的每一项以及共享大小范围内的每一项都将成为目标。

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

代码语言:javascript
复制
<ListBox Grid.Row="1"
         ItemsSource="{Binding LibraryGroupedValuesList}"
         SelectedItem="{Binding SelectedGroupedValues}"
         Grid.IsSharedSizeScope="True">
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71225070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档