WPF中的边框颜色动画无法“实时”工作

时间:2013-04-16 22:38:20

标签: wpf animation

在WPF应用程序中,我试图在TextBox的MouseEnter事件上设置边框颜色更改动画 我搜索了一会儿,并按照不同的教程,但一切似乎都以同样的方式结束:

  • 当鼠标输入边框的颜色时,更改为我在动画“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);
}

为什么它没有显示动画正在发生的任何想法?我在XAML中使用MS教程尝试动画,效果相同 - 它动画但是在鼠标离开之前它没有显示动画过程...

2 个答案:

答案 0 :(得分:2)

Trigger中使用Xaml执行此动画可能更容易,TriggersEnterActionsExitActions,因此您可以使用启动/停止动画的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>

答案 1 :(得分:0)

不确定为什么TextBox边框颜色没有变化,但你可以试试这个:

<Border Name = "border" BorderThickness="5">
<TextBox MouseEnter="TextBox_MouseEnter" MouseLeave="TextBox_MouseLeave"/>
</Border>

然后在MouseEnter和MaouseLeave上尝试此代码:

        ColorAnimation ca = new ColorAnimation();
        ca.From = (Color)ColorConverter.ConvertFromString("#0066FF");
        ca.To = (Color)ColorConverter.ConvertFromString("#FF0000");
        ca.Duration = TimeSpan.FromSeconds(3);
        Storyboard sb = new Storyboard();
        sb.Children.Add(ca);
        Storyboard.SetTarget(ca, border);
        Storyboard.SetTargetProperty(ca, new PropertyPath("(Border.BorderBrush).(SolidColorBrush.Color)"));
        sb.Begin();