2016-11-13 7 views
0

Я хочу показать путь в TextBlock.Изменение поведения усечения текста

Стандартное усечение заканчивается удалением соответствующих частей информации, которую я хочу показать, поскольку она сначала обрезает самую правую часть линии.

Есть ли способ указать в XAML, что текст должен быть усечен слева, а не справа? Установка FlowDirection и TextReadingOrder, кажется, не оказывает никакого влияния на направление усечения, как показано ниже:

<TextBlock Text="{Binding Path}" FontSize="18" FlowDirection="RightToLeft" TextReadingOrder="UseFlowDirection" TextTrimming="CharacterEllipsis" /> 

Можно ли в чистом XAML, или же решение должны быть более сложным, чем (рассматривая размер текстового блока на странице изменить размер и изменить текст для компенсации)?

+0

Вы проверили мой ответ? Любой вопрос? –

ответ

0

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

Вот мой демо: за

<TextBlock Text="Left-abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz 
      abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz 
      abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz 
      abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz 
      abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz-Right" 
      Margin="0,5" TextWrapping="NoWrap" 
      Loaded="TextBlock_Loaded" /> 

Код:

private void TextBlock_Loaded(object sender, RoutedEventArgs e) 
{ 
    var tb = sender as TextBlock; 
    //desired width of TextBlock 
    var desiredWidth = tb.DesiredSize.Width; 
    //cal. char. in string 
    var count = tb.Text.Count(); 
    var reducedText = tb.Text; 
    if (reducedText != "") 
    { 
     //actual width of text 
     var textWidth = tb.ActualWidth; 
     //trim count 
     var trimCount = Math.Ceiling((count/textWidth) * desiredWidth) - 4; 
     reducedText = "... " + reducedText.Substring((int)(count - trimCount), (int)trimCount); 
     tb.Text = reducedText; 
    } 
} 

Моя демо только рассмотрим сценарий, который текст очень длинный (ActualWidth> DesiredWidth), вы также должны реализовать сценарий если этого размера достаточно, чтобы удерживать текст. И будьте осторожны, чтобы этот метод работал только в событии Loaded, так как ActualWidth будет изменен на его визуализированную ширину вместо ширины текста, тогда TextBlock будет отображаться полностью.

Кроме того, поскольку вы используете привязку данных для свойства TextTextBlock, вы можете создать converter, чтобы обрезать текст.

 Смежные вопросы

  • Нет связанных вопросов^_^