XAML 在网格列中拉伸 TextBlock

XAML Strech TextBlock in Grid Colum

每个列表项必须

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

  2. 文本块 2、3、4 必须在单独的行中各占 33%;

为什么 TextBlock 2、3、4 不是 strech?

<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 行?

此代码(具有正常值,因为我没有底层数据结构)对我来说工作正常。

但是不同的行可以有不同的宽度。这可以通过将 StackPanel 的宽度设置为 ActualWidth - 列表视图的边距来解决。

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

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

您需要为堆栈面板指定特定宽度

并且您必须将文字环绕 属性 设置为 'no wrap'

<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>

这非常适合我!

使用ListView.ItemContainerStyle

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