【问题标题】:Silverlight: Button template with texttrimming cut offSilverlight:带有文本修剪功能的按钮模板
【发布时间】: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 以帮助我们帮助您:)

标签: silverlight templates button texttrimming


【解决方案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 中获得文本居中并在文本太长时进行修剪的效果?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 2011-11-03
    • 2013-06-06
    • 1970-01-01
    • 2014-08-21
    相关资源
    最近更新 更多