我有以下代码:
<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中的错误还是我错过了什么?
答案 0 :(得分:2)
我在使用RotateTransform时遇到了同样的问题。我希望我的所有控件都有这个动画。我找到了它的解决方案,看起来它也适用于TrasnslteTransform。
尝试以下代码:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style TargetType="{x:Type TextBox}">
<Setter Property="RenderTransform">
<Setter.Value>
<TranslateTransform X="0" Y="0"/>
</Setter.Value>
</Setter>
<Style.Triggers>
<EventTrigger RoutedEvent="Loaded">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="(TextBox.RenderTransform).(TranslateTransform.X)"
From="300"
To="-300"
AutoReverse="True"
RepeatBehavior="Forever"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<TextBox Width="200" Height="22"/>
</Grid>
我猜诀窍在于你指定目标属性的方式。这段代码对我有用。
我知道提出问题已有5年了,但其他人可能会从答案中受益。 :)
答案 1 :(得分:0)
我不确定我是如何操作的,但我认为您需要将TargetProperty
指定为X
而将TargetName
指定为_translateTransform
:
<Window.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="LayoutTransform">
<Setter.Value>
<TranslateTransform x:Name="_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="X"
Storyboard.TargetName="_translateTransform"
Duration="0:0:1" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>