TextTrimming从左边开始

Bor*_*ris 21 silverlight wpf xaml texttrimming

有没有办法TextBlock在左侧指定文本修剪?

我已经设法完成三个场景中的两个(第三个是我需要的场景):

  1. 定期修剪

    <TextBlock 
        VerticalAlignment="Center" 
        Width="80" 
        TextTrimming="WordEllipsis"
        Text="A very long text that requires trimming" />
    
    // Result: "A very long te..."
    
    Run Code Online (Sandbox Code Playgroud)
  2. 左修剪

    <TextBlock 
        VerticalAlignment="Center" 
        Width="80" 
        FlowDirection="RightToLeft"
        TextTrimming="WordEllipsis"
        Text="A very long text that requires trimming." />
    
    // Result: "...A very long te"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 左边修剪文本末尾的位置

    // Desired result: "...uires trimming"
    
    Run Code Online (Sandbox Code Playgroud)

有谁知道这是否可能?谢谢.

Jef*_*mon 6

如果您不关心椭圆,而只是想在截断文本时看到文本的结尾而不是开头,则可以将TextBlock包裹在另一个容器中,并将其Horizo​​ntalAlignment设置为Right。它将按照您的需要将其切断,但不会丢失椭圆。

<Grid>
    <TextBlock Text="Really long text to cutoff." HorizontalAlignment="Right"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)


Rob*_*los 5

您不能立即执行此操作,但是我可以想到两件事可能会起作用:

1)为TextBlock创建一个附加属性,称为LeftTrimmingText。然后,您将设置此属性而不是Text属性。例如

  <TextBlock my:TextBlockHelper.LeftTrimmingText="A very long text that requires trimming." />
Run Code Online (Sandbox Code Playgroud)

附加的属性将计算实际可以显示多少个字符,然后相应地设置TextBlock的Text属性。

2)创建您自己的包装TextBlock的类,并添加您自己的属性以处理所需的逻辑。

我认为第一种选择比较容易。

  • ColinE:测量API是TextBlock本身。基本上,您可以在代码中创建一个新的临时TextBlock,并继续添加字符,直到ActualWidth变得比您想要的更大为止。临时TextBlock不需要呈现,甚至不需要在可视树中呈现。 (2认同)