Grid Colum中的XAML Strech TextBlock

时间:2015-09-25 20:09:16

标签: c# wpf xaml windows-phone

enter image description here

每个列表项必须是

  1. TextBlock 1填充第一行,宽度为100%;

  2. TextBlock 2,3,4必须在单独的行中填充33%;

  3. 为什么TextBlock 2,3,4不能拉伸?

    <ListView.ItemTemplate><DataTemplate><StackPanel>
        <TextBlock Text="{Binding Name}" />
        <Grid HorizontalAlignment="Stretch">
            <Grid.RowDefinitions>
                <RowDefinition></RowDefinition>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"></ColumnDefinition>
                <ColumnDefinition Width="*"></ColumnDefinition>
                <ColumnDefinition Width="*"></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <TextBlock TextAlignment="Right" Grid.Row="0" Grid.Column="0" 
                 HorizontalAlignment="Stretch" VerticalAlignment="Center" 
                 Text="{Binding Rest}" FontSize="28"/>
            <TextBlock TextAlignment="Right" Grid.Row="0" Grid.Column="1" 
                 HorizontalAlignment="Stretch" VerticalAlignment="Center" 
                 Text="{Binding Currency.Name}" FontSize="25"/>
            <TextBlock TextAlignment="Right" Grid.Row="0" Grid.Column="2" 
                 HorizontalAlignment="Stretch" VerticalAlignment="Center" 
                 Text="{Binding FullRest}" FontSize="22"/>
        </Grid>
    </StackPanel></DataTemplate></ListView.ItemTemplate>
    

    P.S。

    如何在设计时在列表视图中添加1 ... x行?

3 个答案:

答案 0 :(得分:1)

此代码(具有正常值,因为我没有基础数据结构)对我来说很好。

然而,不同的行可以具有不同的宽度。这可以通过将StackPanel的宽度设置为ActualWidth - listview的边距来修复。

您可以在此处找到有关如何添加模拟数据的一些信息,以便在设计器中使用:How to get mock data into listview during design time and real data at run time in WPF

答案 1 :(得分:1)

我使用ListBox以类似的方式绑定我的数据。

您需要提供stackpanel特定宽度

您必须将textwrapping属性设置为“没有换行”

<ListBox x:Name="listbox" >
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Width="480">
                        <TextBlock Text="{Binding main}" />
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition/>
                            <ColumnDefinition/>
                            <ColumnDefinition/>
                        </Grid.ColumnDefinitions>
                        <TextBlock TextWrapping="NoWrap" Text="{Binding one}"/>
                            <TextBlock TextWrapping="NoWrap" Text="{Binding two}" Grid.Column="1"/>
                        <TextBlock TextWrapping="NoWrap" Text="{Binding thr}" Grid.Column="2"/>
                    </Grid>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
        </ListBox>

这对我来说很完美!

答案 2 :(得分:1)

使用ListView.ItemContainerStyle

<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    </Style>
</ListView.ItemContainerStyle>