WPF: TextTrimming on a ContentPresenter
本文关键字:ContentPresenter on TextTrimming WPF | 更新日期: 2023-09-27 17:53:13
是否有一种简单的方法可以让texttrim与ContentPresenter一起工作?
我有隐含的TextBlock和AccessText的样式,有texttrim设置为CharacterEllipsis,但它不是由ContentPresenter捡起。我可以将ContentPresenter更改为AccessText或TextBlock并将其设置在那里,但然后模板只处理文本内容。
有什么建议吗?
谢谢!
派生自UIElement而非Control的元素的隐式样式,如果该元素是在控件的模板中定义的,则不会应用该元素的隐式样式,除非该隐式样式是在应用程序的Resources中定义的。这同样适用于ContentPresenter使用的textblock。
例如,在下面的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>
如果你采用完全相同的样式并将其移动到应用程序的资源中,那么两者都将是红色的:
<Application.Resources>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="Red" />
</Style>
</Application.Resources>
因此,您可以将隐式样式移动到应用程序资源中,这通常不是一个好主意。或者,您可以针对您拥有的特定场景自定义显示。这可以包括添加一个隐式的DataTemplate,或者自定义控件的Template。
多亏了James Nugent的这个要点:"WPF风格在按钮内容上放置字符省略号,而不用用TextBlock替换ContentPresenter,从而失去了支持访问键的能力。"
这个为我工作:
<ContentPresenter.Resources>
<Style TargetType="TextBlock">
<Setter Property="TextTrimming" Value="CharacterEllipsis"></Setter>
</Style>
</ContentPresenter.Resources>