【发布时间】:2010-11-06 03:16:55
【问题描述】:
我有以下代码:
<Window.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="LayoutTransform">
<Setter.Value>
<TranslateTransform />
</Setter.Value>
</Setter>
<Style.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard RepeatBehavior="Forever" AutoReverse="True">
<DoubleAnimation
From="300"
To="-300"
Storyboard.TargetProperty="LayoutTransform.X"
Duration="0:0:1" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
<TextBlock
Grid.Column="1"
Text="This is a sample text."/>
<Rectangle Grid.Column="0" Fill="AliceBlue"/>
<Rectangle Grid.Column="2" Fill="Aquamarine"/>
基本上我想要实现的是 TextBlock 的内容应该从右向左(和向后)滚动。不知何故,这种风格没有做任何事情。 如果我将 TranslateTransform 更改为 ScaleTransform 并将 LayoutTransform.X 更改为 LayoutTransform.ScaleX ,则 TextBlock 的动画效果很好。 这是 WPF 中的错误还是我遗漏了什么?
【问题讨论】:
-
好吧,问题是 LayoutTransform(这里是 MSDN 的解释):设置一个变换提供了强大的缩放和旋转功能。但是,LayoutTransform 会忽略 TranslateTransform 操作。这是因为 FrameworkElement 的子元素的布局系统行为会将缩放或旋转元素位置的任何偏移量自动更正到父元素的布局和坐标系中。将 LayoutTransform 更改为 RenderTransform 现在就像一个魅力。