Я заменяю 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 ясно, что реализация TextTrimming на SL отличается от WPF.В SL TextTrimming действительно работает, только если текст выровнен по левому краю.SL не достаточно умен, чтобы выровнять текст, как это делает WPF.Например:
Кнопка WPF:
Кнопка SL с горизонтальным выравниванием текстового блока = слева:
Кнопка SL с горизонтальным выравниванием текстового блока = по центру: