2013-09-30 59 views
0

我有一個示例應用程序用於突出顯示此問題。轉換時按鈕內容截止

實質上,我想創建一個按鈕,當內容太大而無法放入按鈕時,會自動滾動內容,在這種情況下爲文本。要做到這一點,我想補充一點,就是太大,不適合在容器中的內容元素,然後用故事板動畫一個TranslateTransform,如以下代碼所示:

<Button VerticalAlignment="Center" HorizontalAlignment="Center" Width="75"> 
     <TextBlock HorizontalAlignment="Left" Text="LOTS OF TEXT IN A LONG STRING"> 
      <TextBlock.RenderTransform> 
       <TranslateTransform x:Name="MyTransform"/> 
      </TextBlock.RenderTransform> 
      <TextBlock.Triggers> 
       <EventTrigger RoutedEvent="Window.Loaded"> 
        <BeginStoryboard> 
         <Storyboard RepeatBehavior="Forever"> 
          <DoubleAnimation From="0" To="-180" Storyboard.TargetName="MyTransform" Storyboard.TargetProperty="X" Duration="0:0:5"/> 
         </Storyboard> 
        </BeginStoryboard> 
       </EventTrigger> 
      </TextBlock.Triggers> 
     </TextBlock> 
    </Button> 

如果你運行這個在一個空白的項目,你只會看到前三個字被滾動,其餘的文字缺失。同樣,你會看到元素外部的文本,並且當它離開父容器的邊界時不會隱藏。

如何獲取要顯示的文本的其餘部分並隱藏不在父容器邊界內的文本?

回答

3

RenderTransform時,內容已被裁剪。這意味着您需要一個完整尺寸的TextBlock不被父母剪裁。這就是爲什麼我插入了一個Canvas,它不做任何剪輯,可以做定位。爲防止Button以外的文字設置爲ClipToBounds爲真。

<Button Width="75" Height="25" ClipToBounds="True"> 
    <Canvas> 
     <TextBlock Canvas.Top="-7" Canvas.Left="0" Text="LOTS OF TEXT IN A LONG STRING"> 
      <TextBlock.Triggers> 
       <EventTrigger RoutedEvent="Window.Loaded"> 
        <BeginStoryboard> 
         <Storyboard RepeatBehavior="Forever"> 
          <DoubleAnimation From="50" To="-200" Storyboard.TargetProperty="(Canvas.Left)" Duration="0:0:5"/> 
         </Storyboard> 
        </BeginStoryboard> 
       </EventTrigger> 
      </TextBlock.Triggers> 
     </TextBlock>     
    </Canvas> 
</Button> 

這種解決方案並不「自動 scroll當含量太大,不適合在該按鈕的內容」。更糟糕的是版面系統被破壞(沒有內容大小,沒有對齊),您必須手動定位TextBlock並根據文本長度調整DoubleAnimation值。我害怕使這個真正自動且易於使用,您需要的不僅僅是一些XAML線。

+0

謝謝你的回答。我相信我可以解決您提到的缺點,而不會對我的解決方案產生負面影響。 – CamronBute