3

デフォルトの 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>  

これを修正するにはどうすればよいですか?


詳細情報: Horizo​​ntalAlignment に関する最新のコメントにより、SL の TextTrimming の実装が WPF の実装と異なることは明らかです。SL では、TextTrimming が実際に機能するのは、テキストが左揃えの場合のみです。SL は、WPF のようにテキストを揃えるほどスマートではありません。例えば:

WPF ボタン:

代替テキスト

textblock horizo​​ntalalignment = left の SL ボタン:

代替テキスト

textblock horizo​​ntalalignment = center の SL ボタン:

代替テキスト

4

2 に答える 2

3

さらに簡単な解決策があります。TextBlock の TextAlignment=Center を設定しました。WPF とまったく同じように動作します。助けてくれてありがとう!

于 2010-12-27T18:04:35.593 に答える
2

問題は、あなたHorizontalContentAlignmentが「センター」に設定されていることです。本当に WordEllipsis は、TextBlock の Horizo​​ntalAlignment が "Left" に設定されている場合にのみ意味があります。

編集

望ましい動作を取得するには、これを試してください:-

<Border HorizontalAlignment="Center"
    VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
    <TextBlock x:Name="textblock"
        Text="{TemplateBinding Content}"
        TextTrimming="WordEllipsis"
        TextWrapping="NoWrap"
        Margin="{TemplateBinding Padding}" />
</Border>
于 2010-12-23T14:57:00.330 に答える