2013-12-22 40 views
1

我做文本順利地從右向左移動。運動的 我使用TranslateTransform。 滾動時應出現獲取國外網格的文本的右側部分。 但它在網格的右邊緣被切斷(Clip)。即使向左移動也不會恢復。 我該怎麼做剪裁不是?ClipToBounds和TranslateTransform

<Grid HorizontalAlignment="Left" Height="100" Width="180" VerticalAlignment="Top"> 
     <Label Content="Test Text" HorizontalAlignment="Left" VerticalAlignment="Top" FontSize="72" RenderTransformOrigin="0.5,0.5"> 
      <Label.RenderTransform> 
       <TransformGroup> 
        <ScaleTransform/> 
        <SkewTransform/> 
        <RotateTransform/> 
        <TranslateTransform X="-60"/> 
       </TransformGroup> 
      </Label.RenderTransform> 
     </Label> 
    </Grid> 

回答

2

我的決定。 完全刪除Grid並將其替換爲Canvas

回覆@ Erti-Chris Eelmaa給我帶來了正確的決定。 但在我的情況下,這是不可能的建議。由於網格行的位置不對應於畫布中的位置。 HorizontalAlignment="Left" VerticalAlignment="Top「的標籤換成我在畫布的絕對位置。

TranslateTransform我決定不使用,而且使用動畫與更改屬性Canvas.Left。

在畫布的屬性,您必須啓用ClipToBounds = "True"爲正確的裁剪動畫

<Canvas ClipToBounds="True"> 
     <Label x:Name="text_area" Content="Test Text" Canvas.Left="0" Canvas.Top="0" FontSize="72"> 
</Canvas> 

輔助功能:

ScrollText(text_area,-60,1000,30); 


      public static void ScrollText(FrameworkElement c, double to, int wait_msec, int msec_perpixel) 
      { 
       DoubleAnimation animation = new DoubleAnimation 
       { 
        AutoReverse = true, 
        BeginTime = new TimeSpan(0, 0, 0, 0, wait_msec), 
        To = to, 
        Duration = new Duration(new TimeSpan(0, 0, 0, 0, (int)Math.Abs(to) * msec_perpixel)), 
       }; 


       c.BeginAnimation(Canvas.LeftProperty, animation); 
      } 
1

包裝標籤元素爲畫布,如 :

<Grid HorizontalAlignment="Left" Height="100" Width="180" VerticalAlignment="Top"> 
    <Canvas> 
    <Label Content="Test Text" HorizontalAlignment="Left" VerticalAlignment="Top" FontSize="72" RenderTransformOrigin="0.5,0.5"> 
     <Label.RenderTransform> 
      <TransformGroup> 
       <ScaleTransform/> 
       <SkewTransform/> 
       <RotateTransform/> 
       <TranslateTransform X="-60"/> 
      </TransformGroup> 
     </Label.RenderTransform> 
    </Label> 
    </Canvas> 
</Grid> 

這將阻止任何剪輯發生的歷史。