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 按钮:

替代文字

带有文本块水平对齐 = 左的 SL 按钮:

替代文字

带有文本块水平对齐 = 中心的 SL 按钮:

替代文字

4

2 回答 2

3

还有一个更简单的解决方案。我设置了 TextBlock 的 TextAlignment=Center。与 WPF 中的工作方式完全相同。谢谢您的帮助!

于 2010-12-27T18:04:35.593 回答
2

问题将是您HorizontalContentAlignment设置为“中心”。只有当 TextBlock 的 Horizo​​ntalAlignment 设置为“Left”时,WordEllipsis 才有意义。

编辑

获得所需的行为试试这个: -

<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 回答