2010-12-09 62 views
8

我有一個3列網格用於我的佈局,每個網格的寬度設置爲Width="*"。對於中間(第二)網格,我有另一個3列網格,每個網格包含它自己的文本塊,並且列網格寬度再次設置爲Width="*"Textblock.TextTrimming在網格中不工作

當調整窗口大小時,網格會根據預期調整大小,但如果文本超出網格邊界,則不會修剪第3個文本塊。我將文本框設置爲TextTrimming="WordEllipsis"TextWrapping="Wrap",並且由於某些原因,屬性未被強制執行。

下面是一些代碼,我有:

佈局網格:

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition MinWidth="150" MaxWidth="300" Width="1*" /> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition MinWidth="150" MaxWidth="500" Width="1*" /> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="2*"/> 
    </Grid.ColumnDefinitions> 
</Grid> 

第二列代碼:

<Grid Grid.Column="2" VerticalAlignment="Bottom" HorizontalAlignment="Left" Margin="5" Width="Auto"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="Auto" /> 
    </Grid.ColumnDefinitions> 

    <TextBlock Text="{Binding Path=FeedItems.Count}" Foreground="White" FontSize="18" Width="Auto" FontWeight="SemiBold" /> 
    <TextBlock Text=" items from " Foreground="White" FontSize="18" Width="Auto" Grid.Column="1" /> 
    <TextBlock Text="{Binding Path=Name}" Foreground="White" FontSize="18" Grid.Column="2" TextTrimming="CharacterEllipsis" HorizontalAlignment="Left" Width="Auto" TextWrapping="NoWrap" ClipToBounds="True" /> 
</Grid> 

回答

9

爲了這個工作,你需要的最後一第二個網格中的列有*尺寸,否則它會告訴TextBlock它有儘可能多的空間,即使它不是。自動調整大小的列不會將內容限制在網格範圍內。然而,你可能會得到,如果你有一個TextBlock這樣做更好的成績,並多次運行:

<TextBlock FontSize="18" TextTrimming="CharacterEllipsis"> 
    <Run Text="{Binding Path=FeedItems.Count}" FontWeight="SemiBold" /> 
    <Run Text=" items from " /> 
    <Run Text="{Binding Path=Name}" /> 
</TextBlock> 

請注意,您只能綁定Run.Text作爲.NET 4.0。如果您使用的是舊版本的框架,則必須創建自己的BindableRun,這非常簡單,如所見here

+0

歡呼使用Run.Text的提示。絕對使用它現在。你的回答解決了我的問題。非常感謝。 – 2010-12-09 18:49:18