デフォルトの 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 ボタン:
textblock horizontalalignment = left の SL ボタン:
textblock horizontalalignment = center の SL ボタン: