我将默认的 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 按钮: