为网格列提供100%宽度的文本内容

时间:2013-02-18 00:40:36

标签: windows-phone-7 xaml windows-phone-8

我有一个使用以下模板的ListBox:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="64" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="100" />
    </Grid.ColumnDefinitions>

    <Image Source="{Binding Property3}" Grid.Column="0" HorizontalAlignment="Left" Height="64" Width="64"/> 
    <TextBlock Grid.Column="1" Text="{Binding Property1}"/>
    <TextBlock Grid.Column="2" Text="{Binding Property2}" HorizontalAlignment="Right"/>
</Grid>

我遇到的问题是中间栏。中间列中文本的长度决定了网格的宽度。在不使用宽​​度的精确值的情况下,使网格扩展到页面宽度的100%的最佳方法是什么?或者这不可能吗?我从这里尝试了很多建议(例如,在ListBox上设置Horizo​​ntalContentAlignment)无济于事。

编辑:这是完整页面,用于突出显示问题的最小代码:

<phone:PhoneApplicationPage
x:Class="FoursquareDemo.SandboxPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
mc:Ignorable="d"
shell:SystemTray.IsVisible="True">
<phone:PhoneApplicationPage.Resources>
    <DataTemplate x:Key="ItemTemplate">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="64" />
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="100" />
                </Grid.ColumnDefinitions>

                <Image Source="{Binding Property3}" Grid.Column="0" HorizontalAlignment="Left" Height="64" Width="64"/>
                <TextBlock Grid.Column="1" Text="{Binding Property1}"/>
                <TextBlock Grid.Column="2" Text="{Binding Property2}" HorizontalAlignment="Right"/>
            </Grid>
    </DataTemplate>
</phone:PhoneApplicationPage.Resources>

<ListBox x:Name="LayoutRoot" DataContext="{Binding Source={StaticResource SampleDataSource}}" ItemTemplate="{StaticResource ItemTemplate}" ItemsSource="{Binding Collection}" />

2 个答案:

答案 0 :(得分:1)

找到解决方案:

ListBoxItems不会扩展到ListBox的整个宽度。在这种情况下,最好使用LongListSelector。这似乎有些过分,但它完成了工作。

答案 1 :(得分:0)

有两种方法可以解决问题。

1)将网格的边距设置为边距=&#34; 0,0,0,0&#34;

这基本上将Grid的偏移量设置为0,用于&#34; Left,Top,Right,Bottom&#34;

2)如果上述方法不起作用,请检查父网格。并将父网格的边距设置为与上述相同。如果根据您的设计更改顶部和底部的值,则可以。但是,如果您希望网格的长度占据整个宽度,请确保将左右边距值设置为0.