我从右到左顺利地移动文本。 对于动作我使用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>
答案 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>
这将停止任何剪辑。