2010-12-09 60 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