Textblock.TextTrimming не работает внутри сетки - PullRequest
8 голосов
/ 09 декабря 2010

У меня есть 3 столбца сетки для моего макета с каждой шириной, установленной на Width="*".Для средней (2-й) сетки у меня есть еще 3 сетки столбцов, каждая из которых содержит свой собственный текстовый блок, и снова ширина сетки столбцов устанавливается на Width="*".

При изменении размера окна, сетки изменяются какожидается, однако 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>

Код 2-й колонки:

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

1 Ответ

11 голосов
/ 09 декабря 2010

Для того, чтобы это работало, вам нужно, чтобы последний столбец во второй сетке имел размер *, иначе он сообщит 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, который довольно прост, как видно здесь .

...