2010-12-23 30 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