简化问题。
我有两个ItemsControl
,它们位于另一个之下并且绑定到相同的序列:
[Control] [Another Control] [More Controls]
[Other Ctrl] [Super Control] [Control]
我想要做的是调整它们的尺寸,使它们看起来像是一张桌子:
[Control ] [Another Control] [More Controls]
[Other Ctrl] [Super Control ] [Control ]
“单向”也是可以接受的:使底部物品与顶部物品相同,即使它们更短:
[Control] [Another Control] [More Controls]
[Other C] [Super Control ] [Control ]
一些注意事项:
ItemControl
中。 Grid
或DataGrid
。有关更完整的说明,可以参考我的other question。
更新:为什么他们必须在不同的ItemControls
一般来说,我想要实现的是构建一个绑定到矩形数据结构的表。除了使用嵌套的ItemControl
之外,我没有看到任何其他方法:行{1} ItemControl
,每行包含该行中单元格的另一个ItemControl
。反之亦然:一个用于列,每个项目包含该列中的单元格。无论哪种方式,嵌套项目都必须彼此对齐
我确实意识到可能有其他方法来创建我看不到的这样一个表。这也是我问other question。
先谢谢哦,全能的社区。 p>
答案 0 :(得分:0)
尝试以下方法:
<StackPanel Grid.IsSharedSizeScope="True">
<StackPanel.Resources>
<DataTemplate x:Key="SharedSizeTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="SharedSize"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding}"/>
</Grid>
</DataTemplate>
</StackPanel.Resources>
<ItemsControl ItemTemplate="{StaticResource SharedSizeTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<System:String>One</System:String>
<System:String>Longer</System:String>
<System:String>Longest</System:String>
<System:String>Very Longest</System:String>
</ItemsControl>
<ItemsControl ItemTemplate="{StaticResource SharedSizeTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<System:String>Short</System:String>
<System:String>S</System:String>
<System:String>Even longer than above</System:String>
<System:String>V</System:String>
</ItemsControl>
</StackPanel>
编辑:虽然还有一个问题 - 所有列的大小都会达到相同的最佳宽度 - 不知道你是否可以接受它?
答案 1 :(得分:0)
我最近遇到过类似的问题,最后我用自己的简单hack for datatemplate使用dockpanel这样做:
<DockPanel VerticalAlignment="Center" HorizontalAlignment="Stretch" LastChildFill="True">
<TextBox DockPanel.Dock="Right" Width="40" Text="{Binding CurrentValue}"></TextBox>
<Slider DockPanel.Dock="Right" Width="60" ...></Slider>
<TextBlock DockPanel.Dock="Right" Text="{Binding Header}"></TextBlock>
</DockPanel>
如果您可以决定几乎所有的控件,那么您可以使用这个想法。 width,或者在必要时创建嵌套滚动视图。