以网格作为 ItemPanelTemplate 的列表框:SharedSizeGroup 的问题
Listbox with Grid as ItemPanelTemplate: Problem with SharedSizeGroup
我设置了一个 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>
您有一个外部 ListBox
,其中包含本身为 ListBox
的项目,其 Grid
为 ItemsPanel
。 Grid
定义了共享尺寸组。将 Grid.IsSharedSizeScope="True"
附加的 属性 放在内部 ListBox
上是行不通的,因为这个范围只包含一个 单个 Grid
,项目控制板。现在的方式意味着每个内部 ListBox
及其 own Grid
作为项目面板定义其自己的共享大小范围,这不会影响其他。如果您有例如,这将起作用一个 ItemTemplate
包含一个 Grid
,从那时起每个项目 inside ListBox
,因此 inside 共享大小范围将被定位。
这也暗示了您问题的解决方案,只需将共享大小范围声明移动到外部 ListBox
,这是包含所有内部 ListBox
es 和它们的 [=13= 的范围]s.
<ListBox Grid.Row="1"
ItemsSource="{Binding LibraryGroupedValuesList}"
SelectedItem="{Binding SelectedGroupedValues}"
Grid.IsSharedSizeScope="True">
我设置了一个 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>
您有一个外部 ListBox
,其中包含本身为 ListBox
的项目,其 Grid
为 ItemsPanel
。 Grid
定义了共享尺寸组。将 Grid.IsSharedSizeScope="True"
附加的 属性 放在内部 ListBox
上是行不通的,因为这个范围只包含一个 单个 Grid
,项目控制板。现在的方式意味着每个内部 ListBox
及其 own Grid
作为项目面板定义其自己的共享大小范围,这不会影响其他。如果您有例如,这将起作用一个 ItemTemplate
包含一个 Grid
,从那时起每个项目 inside ListBox
,因此 inside 共享大小范围将被定位。
这也暗示了您问题的解决方案,只需将共享大小范围声明移动到外部 ListBox
,这是包含所有内部 ListBox
es 和它们的 [=13= 的范围]s.
<ListBox Grid.Row="1"
ItemsSource="{Binding LibraryGroupedValuesList}"
SelectedItem="{Binding SelectedGroupedValues}"
Grid.IsSharedSizeScope="True">