文本换行会扩展列以适合文本

问题描述 投票:4回答:5

我简单地定义了一个网格:

<Grid Margin="0,5,0,0">
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="50"></ColumnDefinition>
    <ColumnDefinition Width="50"></ColumnDefinition>
    <ColumnDefinition Width="48"></ColumnDefinition>
    <ColumnDefinition Width="Auto"></ColumnDefinition>
   </Grid.ColumnDefinitions>

然后我试图绑定一些像这样的内容:

<TextBlock TextWrapping="Wrap" Grid.Column="3" Text="{Binding Text}">

设置如下,文本将不会换行。它只是扩展列以适合文本。如果我在最后一列上将宽度设置为固定量,则换行按预期工作。问题在于,如果用户加宽窗口,则列保持固定大小。如何使用网格的宽度动态调整列的大小,但仍然将文本包装在其中?

wpf textwrapping
5个回答
5
投票

宽度为"*"将使用"*"在列之间均匀分割任何剩余空间。如果您有一个包含Width="*"的列,该列将获得所有剩余空间。如果你有2列Width="*",每个列将获得剩余空间的1/2。

这是一个包括星大小的good article on grid sizing


5
投票

有一个令人沮丧的案例,我发现,当你有Width="*"IsSharedSizeScope时,可以用= true收支平衡。

<Border BorderBrush="Red" BorderThickness="1">
    <StackPanel Grid.IsSharedSizeScope="True">

        <Grid HorizontalAlignment="Stretch">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" SharedSizeGroup="G1"/>
                <ColumnDefinition Width="Auto" SharedSizeGroup="G2" />
                <ColumnDefinition Width="*"  SharedSizeGroup="G3" />
            </Grid.ColumnDefinitions>

            <TextBlock Text="Col0" Grid.Column="0" Margin="0,0,5,0"/>
            <TextBlock Text="Col1" Grid.Column="1" Margin="0,0,5,0"/>

            <TextBlock Text="A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" TextWrapping="Wrap" Grid.Column="2"/> 
        </Grid>

    </StackPanel>                   

</Border>

这不会换行,但是如果你将Grid.IsSharedScopeSize更改为false那么它就会。

还没有找到解决方案,但这可能是它不起作用的另一个原因。


1
投票

试试这个:

<Grid Margin="0,5,0,0">
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="50"></ColumnDefinition>
    <ColumnDefinition Width="50"></ColumnDefinition>
    <ColumnDefinition Width="48"></ColumnDefinition>
    <ColumnDefinition Name="ParentColumn" Width="Auto"></ColumnDefinition>
   </Grid.ColumnDefinitions>
   <TextBlock TextWrapping="Wrap" Grid.Column="3" Text="{Binding Text}"
      MaxWidth="{Binding ActualWidth, ElementName=ParentColumn}">

-1
投票

将其宽度设置为“*”


-1
投票

如果希望列/行的大小取决于所述列/行中的内容,则应仅使用“自动”。如果你想“腾出空间”,请使用“*”。在您的情况下,TextBlock需要知道在实际测量之前它有多少空间,因此它可以告诉文本的包装位置。

© www.soinside.com 2019 - 2024. All rights reserved.