有没有一种简单的方法来让TextTrimming在ContentPresenter中起作用?
我对TextBlock和AccessText设置了隐式样式,将TextTrimming设置为CharacterEllipsis,但ContentPresenter没有使用这些样式。我可以将ContentPresenter更改为AccessText或TextBlock并在那里设置它,但是那样模板只处理文本内容。
有什么建议吗?
谢谢!
有没有一种简单的方法来让TextTrimming在ContentPresenter中起作用?
我对TextBlock和AccessText设置了隐式样式,将TextTrimming设置为CharacterEllipsis,但ContentPresenter没有使用这些样式。我可以将ContentPresenter更改为AccessText或TextBlock并在那里设置它,但是那样模板只处理文本内容。
有什么建议吗?
谢谢!
如果 UIElement 派生的元素不是 Control,且该元素在控件模板中定义,则不会应用隐式样式,除非 隐式样式在应用程序资源中定义。对于 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。
如果你能提供更多信息,那么就更容易知道哪种方法最好。
<ContentPresenter.Resources>
<Style TargetType="TextBlock">
<Setter Property="TextTrimming" Value="CharacterEllipsis"></Setter>
</Style>
</ContentPresenter.Resources>