是否有一种简单的方法可以让TextTrimming与ContentPresenter一起使用?
我已经将TextBlock和AccessText的样式设置为将TextTrimming设置为CharacterEllipsis,但是ContentPresenter没有选择它。我可以将ContentPresenter更改为AccessText或TextBlock并将其设置在那里,但模板只处理文本内容。
有什么建议吗?
谢谢!
答案 0 :(得分:12)
如果在控件的模板中定义元素,则不应用从UIElement派生而非Control的元素的隐式样式,除非在应用程序资源中定义了implict样式。对于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>
因此,您可以将隐式Style移动到应用程序资源,这通常不是一个好主意。或者,您可以自定义特定方案的显示。这可以包括添加隐式DataTemplate,或自定义控件的模板。
如果您可以提供更多信息,那么更容易知道哪种方法最好。
答案 1 :(得分:0)
感谢this Gist by James Nugent:“ WPF样式将字符省略号放在按钮内容上,而不用TextBlock替换ContentPresenter,从而失去了支持访问键的能力。
这对我有用:
java.sql.*