WPF中的边框颜色动画在“中不起作用”;“实时”;
在WPF应用程序中,我试图在文本框的鼠标事件中设置边框颜色变化的动画。WPF中的边框颜色动画在“中不起作用”;“实时”;,wpf,animation,Wpf,Animation,在WPF应用程序中,我试图在文本框的鼠标事件中设置边框颜色变化的动画。 我搜索了一段时间,并按照不同的教程进行了学习,但结果似乎都是一样的: 当鼠标进入时,边框颜色将更改为我在动画“From”中设置的颜色 然后什么也没发生,一点动画片也没有 当鼠标在超过动画持续时间的一段时间后离开时,颜色将更改为我在动画“to”中设置的颜色 如果鼠标在动画持续时间之前离开,则边框的颜色将变为“中间”的某种颜色 从这一点上,我认为动画正在发生,但它并没有在动画中显示它… 代码如下: private void
我搜索了一段时间,并按照不同的教程进行了学习,但结果似乎都是一样的:
- 当鼠标进入时,边框颜色将更改为我在动画“From”中设置的颜色
- 然后什么也没发生,一点动画片也没有
- 当鼠标在超过动画持续时间的一段时间后离开时,颜色将更改为我在动画“to”中设置的颜色
- 如果鼠标在动画持续时间之前离开,则边框的颜色将变为“中间”的某种颜色
代码如下:
private void txtSpeakMe_MouseEnter(object sender, MouseEventArgs e)
{
ColorAnimation ca = new ColorAnimation();
ca.From = (Color)ColorConverter.ConvertFromString("#0066FF");
ca.To = (Color)ColorConverter.ConvertFromString("#FF0000");
ca.Duration = TimeSpan.FromSeconds(3);
txtSpeakMe.BorderBrush.BeginAnimation(SolidColorBrush.ColorProperty, ca);
}
关于为什么它没有在动画发生时显示动画,有什么想法吗?我尝试使用MS教程在XAML中制作动画,效果相同-它可以制作动画,但在鼠标离开之前不会显示动画过程…不确定为什么文本框边框颜色没有改变,但您可以尝试以下方法:
<Border Name = "border" BorderThickness="5">
<TextBox MouseEnter="TextBox_MouseEnter" MouseLeave="TextBox_MouseLeave"/>
</Border>
在
Xaml
中使用Trigger
来执行此动画可能更容易,Triggers
具有entreactions
和ExitActions
,因此您可以使用IsMouseOver
事件来启动/停止动画
例如:
<Border Name="border" BorderThickness="5" Width="200" Height="30">
<TextBox Text="StackOverflow"/>
<Border.Style>
<Style TargetType="Border">
<Setter Property="BorderBrush" Value="#0066FF" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Trigger.EnterActions>
<BeginStoryboard HandoffBehavior="SnapshotAndReplace">
<Storyboard>
<ColorAnimation Duration="0:0:3" To="#FF0000" Storyboard.TargetProperty="BorderBrush.Color" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard HandoffBehavior="SnapshotAndReplace">
<Storyboard>
<ColorAnimation Duration="0:0:3" To="#0066FF" Storyboard.TargetProperty="BorderBrush.Color" />
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
您试过了吗?进展如何?嗨,谢谢你的回答。你的方法有效。但是,这是一种常见的做法,将一个元素包装在另一个边框中,然后设置该边框的动画,而不是仅设置元素边框的动画?如果需要,可以只设置文本框边框的动画,但必须覆盖其他一些文本框属性以删除默认的焦点样式,因此通常我只将文本框包装在边框中,但那只是我:)
<Border Name="border" BorderThickness="5" Width="200" Height="30">
<TextBox Text="StackOverflow"/>
<Border.Style>
<Style TargetType="Border">
<Setter Property="BorderBrush" Value="#0066FF" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Trigger.EnterActions>
<BeginStoryboard HandoffBehavior="SnapshotAndReplace">
<Storyboard>
<ColorAnimation Duration="0:0:3" To="#FF0000" Storyboard.TargetProperty="BorderBrush.Color" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard HandoffBehavior="SnapshotAndReplace">
<Storyboard>
<ColorAnimation Duration="0:0:3" To="#0066FF" Storyboard.TargetProperty="BorderBrush.Color" />
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>