我做的文字从右到左平稳地移动。对于运动,我使用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>发布于 2013-12-23 05:19:49
我的决定。完全删除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);
}发布于 2013-12-22 22:45:29
将Label元素包装到画布中,如:
<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>这将阻止任何剪裁的发生。
https://stackoverflow.com/questions/20734770
复制相似问题