WPF:ContentPresenter上的TextTrimming

dex*_*703 9 .net c# wpf contentpresenter texttrimming

有没有一种简单的方法可以让TextTrimming与ContentPresenter一起使用?

我已经将TextBlock和AccessText的样式设置为将TextTrimming设置为CharacterEllipsis,但是ContentPresenter没有选择它.我可以将ContentPresenter更改为AccessText或TextBlock并将其设置在那里,但模板只处理文本内容.

有什么建议?

谢谢!

Cod*_*ked 12

如果元素是在控件的模板中定义的,则除非在应用程序资源中定义了implict样式,否则不应用从UIElement派生而非Control派生的元素的隐式样式.对于ContentPresenter使用的TextBlocks也是如此.

例如,在下面的XAML中,最终用于显示按钮内容的TextBlock将不会获得隐式样式:

<Window.Resources>
    <Style TargetType="TextBlock">
        <Setter Property="Foreground" Value="Red" />
    </Style>
</Window.Resources>
<StackPanel>
    <Button Content="Will not be red" />
    <TextBlock Text="Will be red" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

如果您使用完全相同的样式并将其移动到应用程序的资源,则两者都将为红色:

<Application.Resources>
    <Style TargetType="TextBlock">
        <Setter Property="Foreground" Value="Red" />
    </Style>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)

因此,您可以将隐式样式移动到应用程序资源,这通常不是一个好主意.或者,您可以自定义特定方案的显示.这可以包括添加隐式DataTemplate或自定义控件的模板.

如果您可以提供更多信息,那么更容易知道哪种方法最好.

  • @HB - 我画了红色的小镇! (3认同)

Ben*_*Ben 6

感谢James Nugent 的这个要点:“WPF 样式将字符省略号放在按钮内容上,而不用 TextBlock 替换 ContentPresenter,从而失去支持访问键的能力。”

这对我有用:

<ContentPresenter.Resources>
    <Style TargetType="TextBlock">
        <Setter Property="TextTrimming" Value="CharacterEllipsis"></Setter>    
    </Style>
</ContentPresenter.Resources>
Run Code Online (Sandbox Code Playgroud)