Textblock.TextTrimming не работает внутри сетки

У меня есть 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 ответ

Решение

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

Другие вопросы по тегам