10

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

我有 TextBlock 和 AccessText 的隐含样式,它们的 TextTrimming 设置为 CharacterEllipsis,但 ContentPresenter 没有拾取它。我可以将 ContentPresenter 更改为 AccessText 或 TextBlock 并将其设置在那里,但模板仅处理文本内容。

有什么建议么?

谢谢!

4

2 回答 2

13

如果元素是在控件的模板中定义的,则不会应用从 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,或自定义控件的模板。

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

于 2011-04-28T00:18:13.277 回答
8

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

这对我有用:

<ContentPresenter.Resources>
    <Style TargetType="TextBlock">
        <Setter Property="TextTrimming" Value="CharacterEllipsis"></Setter>    
    </Style>
</ContentPresenter.Resources>
于 2018-12-26T22:32:16.367 回答