2012-02-29 63 views
0

我有一个网格,有两列,这里是定义。在网格中,如何设置文本块的宽度

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="180"></ColumnDefinition> 
     <ColumnDefinition Width="auto"></ColumnDefinition> 
    </Grid.ColumnDefinitions> 
    <TextBlock Name="nText" Text="{Binding Name}" Grid.Column="0" /> 
    <TextBlock Name="vText" Text="{Binding Value}" Grid.Column="1" HorizontalAlignment="Left" TextWrapping="Wrap"/> 
</Grid> 

我的问题是,对于vText,当文字过长,文字不能被包裹,无论columndefinition宽度为自动或*。但是,如果我为第2列的宽度或vText的宽度设置了定义的值,则文本将被打包。

如何设置文本块的宽度以便文本内容可以被打包?

我试图绑定到columnDefinition的宽度/ ActualWidth,但也失败了。

非常感谢。

回答

0
<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="180"></ColumnDefinition> 
     <ColumnDefinition Width="*"></ColumnDefinition> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="auto" /> 
    </Grid.RowDefinitions> 
    <TextBlock Grid.Column="0" Grid.Row="0" Name="nText" Text="nText"/> 
    <TextBlock Grid.Column="1" Grid.Row="0" Name="vText" TextWrapping="Wrap"> 
     vText vTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvText 
     vTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvText 
     vTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvTextvText 
    </TextBlock> 
</Grid> 
+0

感谢您的回复。如何使用文本的绑定数据? – user1205398 2012-02-29 17:02:09

+0

你尝试过使用你有的绑定吗?根据问题绑定工作只是不包装。 – Paparazzi 2012-02-29 18:02:06

1

为了详细说明BalamBalam的回答,改变

<ColumnDefinition Width="auto"></ColumnDefinition> 

<ColumnDefinition Width="*"></ColumnDefinition> 

会做你想要什么,因为"auto"模式预计基于子元素来推断它的大小。在这种情况下,TextBlock没有定义宽度,所以ColumnDefinition无法推断宽度。

因为ColumnDefinition和TextBlock都没有定义宽度,所以TextBlock的宽度将默认为无限大,并且单词换算算法将永远不会裁剪文本。

相比之下,"*"意味着填充剩余的空间,它将由网格(如果您设置一个宽度)或其父母之一定义。最坏的情况下,"*"将能够在顶层找到一个值,因为窗口总是设置宽度/高度。

希望这可以让我们更多地了解布局引擎如何在尺寸上实现它的魔力!

+0

谢谢。我试过“自动”和“*”,结果是一样的。 – user1205398 2012-02-29 17:09:03

+1

什么是围绕网格的包含控件? *如果FrameworkElement链的大小合适,应该能够获得非无限大小。如果您在网格上设置宽度,“*”仍然不起作用? – ianschol 2012-02-29 17:22:29