首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ClipToBounds和TranslateTransform

ClipToBounds和TranslateTransform
EN

Stack Overflow用户
提问于 2013-12-22 22:35:05
回答 2查看 2.3K关注 0票数 1

我做的文字从右到左平稳地移动。对于运动,我使用TranslateTransform。在滚动时,网格应该出现在文本的右侧。但是它被切断(剪辑)在网格的右边边缘。即使移到左边也不会恢复。我该怎么做才能剪裁呢?

代码语言:javascript
复制
    <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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-23 05:19:49

我的决定。完全删除Grid并用Canvas替换它。

回复@Erti-Chris Eelmaa让我做出了正确的决定。但就我而言,这是不可能的推荐。因为网格行的位置不对应于画布中的位置。HorizontalAlignment="Left" VerticalAlignment="Top“作为标签,我被替换为画布中的绝对位置。

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

在画布的属性中,必须启用ClipToBounds = "True"以进行正确的裁剪。

代码语言:javascript
复制
<Canvas  ClipToBounds="True">
       <Label x:Name="text_area" Content="Test Text"  Canvas.Left="0" Canvas.Top="0" FontSize="72">
</Canvas>

动画辅助功能:

代码语言:javascript
复制
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);
            }
票数 4
EN

Stack Overflow用户

发布于 2013-12-22 22:45:29

将Label元素包装到画布中,如:

代码语言:javascript
复制
<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>

这将阻止任何剪裁的发生。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20734770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档