0

在 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);
}

关于为什么它没有显示动画的任何想法?我使用 MS 教程在 XAML 中尝试了动画,效果相同 - 它动画但直到鼠标离开它才显示动画过程......

4

2 回答 2

2

TriggerXaml执行此动画时使用 a 可能更容易,Triggers有 a EnterActionsExitActions因此您可以使用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>
于 2013-04-17T02:31:04.777 回答
0

不知道为什么 TextBox 边框颜色没有改变,但你可以试试这个:

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

然后在 MouseEnter 和 MauuseLeave 上试试这个代码:

        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();
于 2013-04-17T01:12:02.297 回答