![](/img/trans.png)
[英]Creating Customised button on silverlight for windows phone c#
[英]Creating a table with Silverlight for Windows Phone 7
我想在WP7上创建一个表格。 这是我目前使用带有网格的ListBox作为数据模板的方法。
<ListBox x:Name="ResultsList" Margin="12,0" Grid.Row="1">
<ListBox.Resources>
<DataTemplate x:Key="ResultsListItem">
<Grid d:DesignWidth="385" Height="28">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="88"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock x:Name="textBlock1" Margin="0,0,24,0"/>
<TextBlock x:Name="textBlock2" Margin="0,0,24,0"
VerticalAlignment="Top" Grid.Column="1"/>
<TextBlock x:Name="textBlock3" Margin="0,0,24,0"
VerticalAlignment="Top" Grid.Column="3"/>
</Grid>
</DataTemplate>
</ListBox.Resources>
<ListBox.ItemTemplate>
<StaticResource ResourceKey="ResultsListItem"/>
</ListBox.ItemTemplate>
</ListBox>
问题在于,结果表的列大小不相等。 网格的列定义适用于每一行,而与其他行无关。 这意味着,如果textBlock1中有长文本,则列0将更大。 在下一行中,textBlock1中的文本可能更短,导致列0也比上一行中的列0短。
如何将所有行中的列均等地设置大小? 我不想使用固定宽度,因为当方向从纵向更改为横向时,列会自动调整大小。
有HeaderedItemsControl,但据我了解,它不适用于Windows Phone 7?
这是一个棘手的问题! 在WPF中,存在SharedSizeGroup的概念,该概念允许您在多个网格之间共享列宽,但这在Silverlight中不可用。
网路上有几种解决方法:
http://www.scottlogic.co.uk/blog/colin/2010/11/using-a-grid-as-the-panel-for-an-itemscontrol/
http://databaseconsultinggroup.com/blog/2009/05/simulating_sharedsizegroup_in.html
尽管都不是简单的解决方案。
您也可以尝试Mike的AutoGrid:
http://whydoidoit.com/2010/10/06/automatic-grid-layout-for-silverlight/
这是ColinE建议的使用SharedSizeGroup的解决方案。
<ListBox x:Name="ResultsList">
<ListBox.Resources>
<SharedSize:SharedSizeGroup x:Key="Col1Width" />
<SharedSize:SharedSizeGroup x:Key="Col2Width" />
<SharedSize:SharedSizeGroup x:Key="Col3Width" />
<DataTemplate x:Key="ResultsListItem">
<StackPanel d:DesignWidth="385" Orientation="Horizontal">
<SharedSize:SharedSizePanel WidthGroup="{StaticResource Col1Width}">
<TextBlock x:Name="textBlock" MaxWidth="100" Text="{Binding A}"/>
</SharedSize:SharedSizePanel>
<SharedSize:SharedSizePanel WidthGroup="{StaticResource Col2Width}">
<TextBlock x:Name="textBlock1" MaxWidth="85" Text="{Binding B}"/>
</SharedSize:SharedSizePanel>
<SharedSize:SharedSizePanel WidthGroup="{StaticResource Col3Width}">
<TextBlock x:Name="textBlock2" MaxWidth="200" Text="{Binding C}"/>
</SharedSize:SharedSizePanel>
</StackPanel>
</DataTemplate>
</ListBox.Resources>
<ListBox.ItemTemplate>
<StaticResource ResourceKey="ResultsListItem"/>
</ListBox.ItemTemplate>
</ListBox>
甚至每列的最大值都可以通过TextBlock的MaxWidth属性来控制。 SharedSizeGroups确保TextBlocks在每一行中具有相同的大小。
您可以使用WrapPanel
。 设置以下ItemsPanel
在Datatemple
,你可以有文字块。
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<control:WrapPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.