TextTrimming с многоточием и двоеточием - PullRequest
18 голосов
/ 09 марта 2012

Это относительно простой вопрос:

Я могу обрезать текст с помощью многоточия, используя это:

<TextBlock Text="{Binding}" TextTrimming="CharacterEllipsis"/>

это дало бы мне что-то вроде:

«Это предложение слишком длинное»

=>

«Это предложение я ...»

Это все замечательно, но я действительно хочу вот что:

"Это предложение ...:" / "Это предложение ...:"

Что я ищу, так это двоеточие после эллипсов. Есть ли простой способ добиться этого?

EDIT:

извините за путаницу.

Я хочу изменить строку многоточия по умолчанию с '...' на '...:'. Также я собираюсь включить двоеточие в текстовую строку. Таким образом, у меня всегда будет отображаться двоеточие. Кроме того, все должно быть на одной линии в каждой ситуации.

вот несколько приемлемых результатов:

достаточно коротко:

слишком л ...:

Ответы [ 2 ]

22 голосов
/ 09 марта 2012

Это работает, но мне нужно было добавить некоторые отступы, чтобы двоеточие всегда оставалось видимым:

<TextBlock Padding="0,0,5,0" >
    <TextBlock TextTrimming="CharacterEllipsis">Lorem ipsum dolor sit amet, consectetur adipisicing </TextBlock>
    <TextBlock>:</TextBlock>
</TextBlock>
2 голосов
/ 09 марта 2012

Используйте два TextBlocks с примером эллипсов в первом и двоеточием во втором.

Обновление:

Похоже, это относительно простой вопрос с множеством сложностей.

Можно испытать соблазн иметь несколько текстовых блоков, первый с целевым текстом иеще два отображают «:» и «...:» и переключаются между ними с помощью преобразователя значений Visibility в зависимости от того, было ли в первом TextBlock достаточно места для отображения всего его текста.У этого есть возможности, но есть потенциал для нестабильных макетов.

Только что реализовав пользовательскую панель, я могу представить возможное решение с использованием панели, предназначенной для трех дочерних элементов, которые будут тремя описанными выше текстовыми блоками1

Пользовательская панель, унаследованная от Panel, должна переопределять два ключевых метода: Measure and Arrange.

В методе measure должны быть измерены все дочерние элементы.

В методеrange проверьте, достаточно ли местаотобразить первых двух детей и, если это так, поставить их рядом.Если недостаточно места для отображения первого дочернего размера, чтобы можно было отобразить третье дочернее пространство и выровнять третьего дочернего элемента по правому краю.

Обновление:

Я попробовал пользовательскую панель, и она работала, кромепервый текстовый блок - это отдельные символы клипа.

Окончательное решение для чистого форматирования - это метод, который корректирует строку отображения до тех пор, пока не будет помещен в выделенное пространство с соответствующим суффиксом.

...