4

我有一个简单定义的网格:

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

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

4

5 回答 5

5

的宽度"*"将使用 . 在列之间平均分配任何剩余空间"*"。如果您有一个带有 的列Width="*",则该列将获得所有剩余空间。如果您有 2 列Width="*",则每列将获得剩余空间的 1/2。

这是一篇关于网格大小的好文章,其中包括星形大小。

于 2009-08-03T20:39:54.053 回答
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则可以。

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

于 2011-07-01T19:50:30.083 回答
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}">
于 2009-09-04T17:49:37.743 回答
-1

将其宽度设置为“*”

于 2009-05-10T17:39:31.303 回答
-1

仅当您希望根据所述列/行中的内容调整列/行大小时,才应使用 Auto。如果您想“分配剩余空间”,请使用“*”。在您的情况下, TextBlock 需要知道在实际测量之前它有多少空间,以便它可以告诉在哪里包装文本。

于 2010-10-28T09:59:03.620 回答