我正在开发适用于 Windows Phone 8.1/Windows 8.1 的通用应用程序。我正在使用 MVVM 模式。我有一个包含动态数量的堆栈面板的表,这些面板绑定(bind)到 View 模型中的源。一个堆栈面板是表中的一行。如何使堆栈面板中的项目具有相同的宽度?我知道 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>
因为这是表格,我尝试使用网格而不是堆栈面板,但我无法使其工作。我尝试了这个解决方案wpf grid with dynamic columns 。但即使绑定(bind)属性中的值正确,我最终也会得到聚集在第 0 行、第 0 列的项目。
任何帮助将不胜感激(甚至是网格解决方案)。
最佳答案
StackPanel
的宽度由其子级驱动。看起来 StackPanel
中有 3 个子级,这意味着它们不是动态生成的。您声明只有堆栈面板的数量发生变化。如果您不反对使用 Grid
而不是 StackPanel
,则以下代码将起作用,因为 Grid
将自动拉伸(stretch)(采取所有允许的宽度),如果您创建宽度指定为百分比的列,则动态将该宽度向下滴到其子项:
<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>
关于c# - 通用应用程序中的动态表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30214044/