按钮样式OuterGlowBitmapEffect - > DropShadowEffect

时间:2013-07-08 07:11:34

标签: .net wpf c#-4.0

在.NET 3.5中,我在MouseOver事件中使用了OuterGlowBitmapEffect,它运行得很完美。

现在我转向.NET 4.0并且没有工作 - 已弃用,所以我将我的代码重写为DropShadowEffect。

它有效,但鼠标悬停和动画开始之间有很长的延迟 - 大约500ms。有谁知道为什么请?或者我做错了什么?

风格:

<Style x:Key="Button" TargetType="{x:Type Button}">
<Style.Setters>
    <Setter Property="Effect">
        <Setter.Value>
            <DropShadowEffect ShadowDepth="0" Color="Yellow" BlurRadius="800" RenderingBias="Performance" Opacity="0" />
        </Setter.Value>
    </Setter>
</Style.Setters>
<Style.Triggers>
    <Trigger Property="Button.IsMouseOver" Value="True">
        <Trigger.EnterActions>
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation Storyboard.TargetProperty="Effect.Opacity" From="0" To="1" By="1" BeginTime="0:0:0" Duration="0:0:0" />
                    <DoubleAnimation Storyboard.TargetProperty="Effect.Opacity" From="1" To="0" By="1" BeginTime="0:0:1" Duration="0:0:0" />
                </Storyboard>
            </BeginStoryboard>
        </Trigger.EnterActions>
    </Trigger>
</Style.Triggers>

按钮:

<Button Content="B1" Canvas.Left="207" Canvas.Top="321" Height="70" Name="btn1" Style="{StaticResource Button}" Width="380" />

1 个答案:

答案 0 :(得分:1)

您可以在动画中使用BlurRadius属性,而不是Opacity。您还可以使用AutoReverse属性返回初始状态:

    <DropShadowEffect ShadowDepth="0" Color="Yellow" 
BlurRadius="0" RenderingBias="Performance"/>

动画:

    <DoubleAnimation Storyboard.TargetProperty="Effect.BlurRadius" 
From="0" To="100" Duration="0:0:0.2" AutoReverse="True"/>

你应该得到类似的效果,毫不拖延地开始。