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

我有TextTrilocking设置为CharacterEllipsis的TextBlock和AccessText的隐式样式,但是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或自定义控件的模板。

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

10-07 17:27