WPF中的边框颜色动画在“中不起作用”;“实时”;

WPF中的边框颜色动画在“中不起作用”;“实时”;,wpf,animation,Wpf,Animation,在WPF应用程序中,我试图在文本框的鼠标事件中设置边框颜色变化的动画。 我搜索了一段时间,并按照不同的教程进行了学习,但结果似乎都是一样的: 当鼠标进入时,边框颜色将更改为我在动画“From”中设置的颜色 然后什么也没发生,一点动画片也没有 当鼠标在超过动画持续时间的一段时间后离开时,颜色将更改为我在动画“to”中设置的颜色 如果鼠标在动画持续时间之前离开,则边框的颜色将变为“中间”的某种颜色 从这一点上,我认为动画正在发生,但它并没有在动画中显示它… 代码如下: private void

在WPF应用程序中,我试图在文本框的鼠标事件中设置边框颜色变化的动画。
我搜索了一段时间,并按照不同的教程进行了学习,但结果似乎都是一样的:

  • 当鼠标进入时,边框颜色将更改为我在动画“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>