2010-12-23 24 views
3

我用TextBlock替换默认按钮模板的ContentPresenter,因此可以在文本太长时修剪文本。Silverlight:带有文本截断的按钮模板

在WPF中正常工作。在Silverlight中的文本被推到一边,并在左侧切断时,即使是右侧空间:

alt text

模板是没有什么特别的,只是替换为TextBlock中的ContentPresenter:

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

alt text

SL按钮与正文块的Horizo​​ntalAlignment =中心:

alt text

alt text

与正文块的Horizo​​ntalAlignment =左SL按钮

+1

请提供您的模板的xaml,以帮助我们帮助您:) – danbord 2010-12-23 01:29:00

回答

3

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

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> 
+0

这可以工作,但这将使所有的按钮文本左冲。如何获得WPF中文本居中的效果,并修剪它是否太长? – dex3703 2010-12-23 16:08:28