2013-12-22 35 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> 

这将阻止任何剪辑发生的历史。