有没有一种简单的方法可以让TextTrimming与ContentPresenter一起工作?
我有用于TextBlock和AccessText的隐式样式,它们的TextTrimming设置为CharacterEllipsis,但ContentPresenter不接受它。我可以将ContentPresenter更改为AccessText或TextBlock并将其设置在那里,但随后模板只处理文本内容。
有什么建议吗?
谢谢!
发布于 2011-04-28 08:18:13
如果元素是在控件的模板中定义的,则不会应用从UIElement派生的元素的隐式样式,除非在应用程序资源中定义了隐式样式。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>如果您采用完全相同的样式并将其移动到应用程序的Resources,则这两个样式都将为红色:
<Application.Resources>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="Red" />
</Style>
</Application.Resources>因此,您可以将您的隐式风格转移到应用程序资源,这通常不是一个好主意。或者,您可以根据您拥有的特定场景自定义显示。这可以包括添加隐式DataTemplate或自定义控件的模板。
如果你能提供更多的信息,那么就更容易知道哪种方法是最好的。
发布于 2018-12-27 06:32:16
多亏了this Gist by James Nugent:"WPF可以在按钮内容上放置字符省略号,而不会用TextBlock替换ContentPresenter,从而失去对访问键的支持能力。“
这对我很有效:
<ContentPresenter.Resources>
<Style TargetType="TextBlock">
<Setter Property="TextTrimming" Value="CharacterEllipsis"></Setter>
</Style>
</ContentPresenter.Resources>https://stackoverflow.com/questions/5810919
复制相似问题