我正在为Windows Phone 8.1 / Windows 8.1开发通用应用程序。我正在使用MVVM模式。我有一个动态数量的stackpanels表,它们在视图模型中绑定到source。一个堆栈面板是表中的一行。如何在堆叠面板中制作相同宽度的物品?我知道IsSharedSizeScope
,但这在通用应用中的网格中不可用。
<ItemsControl Grid.Column="1" HorizontalAlignment="Stretch"
ItemsSource="{Binding PowerMaxiTableSource0, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Border Background="{Binding IsEnabled, Converter={StaticResource BackgroundConverter}}">
<TextBlock Text="{Binding Text0}" />
</Border>
<Border Background="{Binding IsEnabled, Converter={StaticResource BackgroundConverter}}">
<TextBlock Text="{Binding Text1}" />
</Border>
<Border Background="{Binding IsEnabled, Converter={StaticResource BackgroundConverter}}">
<TextBlock Text="{Binding Text2}" />
</Border>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
因为这是表我尝试使用网格而不是stackpanels,但我无法使其工作。我尝试了这个解决方案wpf grid with dynamic columns。但是我最终得到了在第0行,第0列中聚集的项目,即使在绑定属性中具有正确的值也是如此。
任何帮助都会非常感激(甚至是网格解决方案)。
答案 0 :(得分:2)
StackPanel
的宽度由其子女驱动。看起来StackPanel
中有3个孩子,这意味着它们不是动态生成的。您声明只有堆栈面板的数量发生变化。如果您不反对Grid
使用而不是StackPanel
,则以下代码将起作用,因为Grid
将自动拉伸(占用所有允许的宽度)并沿着该宽度逐渐减小如果您创建宽度指定为百分比的列,则动态显示给孩子:
<ItemsControl HorizontalAlignment="Stretch">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="33*"/>
<ColumnDefinition Width="33*"/>
<ColumnDefinition Width="33*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Background="{Binding IsEnabled, Converter={StaticResource BackgroundConverter}}">
<TextBlock Text="{Binding Text0}" />
</Border>
<Border Grid.Column="1" Background="{Binding IsEnabled, Converter={StaticResource BackgroundConverter}}">
<TextBlock Text="{Binding Text1}" />
</Border>
<Border Grid.Column="2" Background="{Binding IsEnabled, Converter={StaticResource BackgroundConverter}}">
<TextBlock Text="{Binding Text2}" />
</Border>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>