WPF:ContentPresenter上的TextTrimming

时间:2011-04-27 21:37:20

标签: wpf contentpresenter texttrimming

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

我已经将TextBlock和AccessText的样式设置为将TextTrimming设置为CharacterEllipsis,但是ContentPresenter没有选择它。我可以将ContentPresenter更改为AccessText或TextBlock并将其设置在那里,但模板只处理文本内容。

有什么建议吗?

谢谢!

2 个答案:

答案 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.*