2012-02-29 67 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