繁体   English   中英

使用Windows Phone 7的Silverlight创建表

[英]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 设置以下ItemsPanelDatatemple ,你可以有文字块。

        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <control:WrapPanel />
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM