有没有一种简单的方法可以让 TextTrimming 与 ContentPresenter 一起工作?
我有 TextBlock 和 AccessText 的隐含样式,它们的 TextTrimming 设置为 CharacterEllipsis,但 ContentPresenter 没有拾取它。我可以将 ContentPresenter 更改为 AccessText 或 TextBlock 并将其设置在那里,但模板仅处理文本内容。
有什么建议么?
谢谢!
有没有一种简单的方法可以让 TextTrimming 与 ContentPresenter 一起工作?
我有 TextBlock 和 AccessText 的隐含样式,它们的 TextTrimming 设置为 CharacterEllipsis,但 ContentPresenter 没有拾取它。我可以将 ContentPresenter 更改为 AccessText 或 TextBlock 并将其设置在那里,但模板仅处理文本内容。
有什么建议么?
谢谢!
如果元素是在控件的模板中定义的,则不会应用从 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>
如果您采用完全相同的样式并将其移动到应用程序的资源中,那么两者都将是红色的:
<Application.Resources>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="Red" />
</Style>
</Application.Resources>
因此,您可以将隐式样式移动到应用程序资源,这通常不是一个好主意。或者,您可以针对您拥有的特定场景自定义显示。这可以包括添加隐式 DataTemplate,或自定义控件的模板。
如果您可以提供更多信息,那么将更容易知道哪种方法是最好的。
感谢James Nugent 的这个要点:“WPF 样式将字符省略号放在按钮内容上,而不用 TextBlock 替换 ContentPresenter,因此失去了支持访问键的能力。”
这对我有用:
<ContentPresenter.Resources>
<Style TargetType="TextBlock">
<Setter Property="TextTrimming" Value="CharacterEllipsis"></Setter>
</Style>
</ContentPresenter.Resources>