ClipToBounds和TranslateTransform

时间:2013-12-22 22:35:05

标签: wpf text scroll

我从右到左顺利地移动文本。 对于动作我使用TranslateTransform。 在滚动时,出现在国外网格的文本的右侧部分应该出现。 但它在网格的右边缘被切断(Clip)。即使向左移动也不会恢复。 我该怎么办才能裁剪?

    <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 个答案:

答案 0 :(得分:2)

我的决定。 完全删除Grid并将其替换为Canvas

回复@ Erti-Chris Eelmaa让我做出了正确的决定。 但在我的案例中,这是一个不可能的建议。由于Grid Row的位置与Canvas中的位置不对应。 HorizontalAlignment="Left" VerticalAlignment="Top“for Label I替换为Canvas中的绝对位置。

TranslateTransform我决定不使用。并使用动画更改属性Canvas.Left。

在Canvas的属性中,您必须启用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 :(得分:1)

将Label元素包装到Canvas中, 如:

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

这将停止任何剪辑。