网格列中的 XAML 拉伸文本块

Posted

技术标签:

【中文标题】网格列中的 XAML 拉伸文本块【英文标题】:XAML Strech TextBlock in Grid Colum 【发布时间】:2015-12-23 17:49:19 【问题描述】:

每个列表项必须是

    TextBlock 1 以 100% 的宽度填充第一行;

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

为什么 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>

附言

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

【问题讨论】:

【参考方案1】:

使用 ListView.ItemContainerStyle

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

【讨论】:

【参考方案2】:

这段代码(具有正常值,因为我没有底层数据结构)对我来说很好。

但是,不同的行可以有不同的宽度。这可以通过将 StackPanel 的 Width 设置为 ActualWidth - listview 的边距来解决。

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

【讨论】:

【参考方案3】:

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

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

您必须将 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>

这非常适合我!

【讨论】:

以上是关于网格列中的 XAML 拉伸文本块的主要内容,如果未能解决你的问题,请参考以下文章

CSS - 打破网格元素并在列中拉伸到最宽

在使用 react-select Select 的同一网格中时,文本字段不会拉伸

XAML TextBox:即使verticalalignment拉伸,如何保持高度固定?

在单个带中具有多行时拉伸数据溢出的行

在单个波段中具有多行时,数据溢出会拉伸一行

保持网格中心并最小化/最大化 WPF 网格中的拉伸