Silverlight:带有文本修剪功能的按钮模板

Posted

技术标签:

【中文标题】Silverlight:带有文本修剪功能的按钮模板【英文标题】:Silverlight: Button template with texttrimming cut off 【发布时间】:2011-05-29 17:34:34 【问题描述】:

我将默认 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按钮=中心:

【问题讨论】:

请提供您模板的 xaml 以帮助我们帮助您:) 【参考方案1】:

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

【讨论】:

【参考方案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>

【讨论】:

这可行,但这会使所有按钮文本向左对齐。如何在 WPF 中获得文本居中并在文本太长时进行修剪的效果?

以上是关于Silverlight:带有文本修剪功能的按钮模板的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationController 的自定义修剪后退按钮文本

选择多个带有文本的容器并修剪前150个字符

WPF/Silverlight问题:我自定义的按钮模板,怎么才能让里面的元素和整个按钮的大小同比例缩放

模板过滤器修剪任何前导或尾随空格

Silverlight 按钮 - 悬停时更改前景色

带有代码突出显示的 Silverlight 控件?