Silverlight:带有文本修剪功能的按钮模板
Posted
技术标签:
【中文标题】Silverlight:带有文本修剪功能的按钮模板【英文标题】:Silverlight: Button template with texttrimming cut off 【发布时间】:2011-05-29 17:34:34 【问题描述】:我将默认 Button 模板的 ContentPresenter 替换为 TextBlock,因此文本过长时可以修剪。
在 WPF 中工作正常。在 Silverlight 中,文本被推到一个边缘并在左侧被切断,即使右侧有空间:
模板没什么特别的,只是把 ContentPresenter 换成了 TextBlock:
<Border x:Name="bdrBackground"
BorderBrush="TemplateBinding BorderBrush"
BorderThickness="TemplateBinding BorderThickness"
Background="TemplateBinding Background" />
<Rectangle x:Name="rectMouseOverVisualElement"
Opacity="0">
<Rectangle.Fill>
<SolidColorBrush x:Name="rectMouseOverColor"
Color="StaticResource MouseOverItemBgColor"/>
</Rectangle.Fill>
</Rectangle>
<Rectangle x:Name="rectPressedVisualElement"
Opacity="0"
Style="TemplateBinding Tag"/>
<TextBlock x:Name="textblock"
Text="TemplateBinding Content"
TextTrimming="WordEllipsis"
TextWrapping="NoWrap"
HorizontalAlignment="TemplateBinding HorizontalContentAlignment"
Margin="TemplateBinding Padding"
VerticalAlignment="TemplateBinding VerticalContentAlignment"/>
<Rectangle x:Name="rectDisabledVisualElement"
Opacity="0"
Style="StaticResource RectangleDisabledStyle"/>
<Rectangle x:Name="rectFocusVisualElement"
Opacity="0"
Style="StaticResource RectangleFocusStyle"/>
</Grid>
</ControlTemplate>
我该如何解决这个问题?
更多信息: 根据关于 HorizontalAlignment 的最新评论,很明显 SL 的 TextTrimming 实现与 WPF 不同。在 SL 中,TextTrimming 只有在文本左对齐时才真正起作用。 SL 不够聪明,无法像 WPF 那样对齐文本。例如:
WPF 按钮:
带有文本块水平对齐=左的SL按钮:
带有文本块水平对齐的SL按钮=中心:
【问题讨论】:
请提供您模板的 xaml 以帮助我们帮助您:) 【参考方案1】:还有一个更简单的解决方案。我设置了 TextBlock 的 TextAlignment=Center。与 WPF 中的工作方式完全相同。感谢您的帮助!
【讨论】:
【参考方案2】:问题在于您的HorizontalContentAlignment
设置为“中心”。只有当 TextBlock 的 HorizontalAlignment 设置为“Left”时,WordEllipsis 才有意义。
编辑
获得所需的行为试试这个:-
<Border HorizontalAlignment="Center"
VerticalAlignment="TemplateBinding VerticalContentAlignment">
<TextBlock x:Name="textblock"
Text="TemplateBinding Content"
TextTrimming="WordEllipsis"
TextWrapping="NoWrap"
Margin="TemplateBinding Padding" />
</Border>
【讨论】:
这可行,但这会使所有按钮文本向左对齐。如何在 WPF 中获得文本居中并在文本太长时进行修剪的效果?以上是关于Silverlight:带有文本修剪功能的按钮模板的主要内容,如果未能解决你的问题,请参考以下文章
UINavigationController 的自定义修剪后退按钮文本