WPF动画线性渐变

时间:2009-11-10 11:13:48

标签: wpf animation storyboard

您可以通过以下方式设置线性渐变动画:

<Storyboard x:Key="Focused" >
<DoubleAnimation Duration="0:0:0.3" Storyboard.TargetProperty=
"BorderBrush.GradientStops[0].Offset" Storyboard.TargetName="Bd"/>
</Storyboard>

到目前为止很好。您可以设置颜色以将其设置为动画。如何将To属性设置为point 你已经拥有的渐变资源?

是否可以使用没有偏移的borderbrush目标属性?在大多数情况下,我需要完全切换渐变。

修改

那么,我怎样才能使用颜色动画从一个渐变偏移渐变到另一个渐变偏移,其中目标颜色不是硬编码的,而是来自资源?

示例:

  <!-- @ MouseOver -->
<LinearGradientBrush x:Key="MouseOverBrush" StartPoint="0,0" EndPoint="0,1">
    <GradientStop Color="#FF656565" Offset="0"/>
    <GradientStop Color="#33656565" Offset="1"/>
</LinearGradientBrush>

<Style x:Key="CheckBoxStyle" TargetType="{x:Type CheckBox}">
    <Setter Property="Foreground" Value="{StaticResource CheckBoxForeground}"/>
    <Setter Property="Background" Value="{StaticResource CheckBoxGradientBrush}"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type CheckBox}">
                <Border x:Name="Bd" 
                        Background="{TemplateBinding Background}">
                    <ContentPresenter 
                        Content="{TemplateBinding Content}"
                        SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
                        RecognizesAccessKey="True"/>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="true">
                        <Setter TargetName="Bd" Property="Background" Value="{StaticResource MouseOverBrush}"/>         
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

如果我想将鼠标上的bd背景设置为鼠标悬停,我该怎么办?

3 个答案:

答案 0 :(得分:3)

您有两种选择,具体取决于您想要的效果以及您是否知道所涉及画笔的结构:

  1. 您可以使用<VisualBrush>从任何画笔淡化到另一个画笔,画布包含两个重叠的1x1矩形画布,每个画笔都涂有两个画笔。您可以设置VisualBrush内两个矩形的不透明度的动画,以便从一个画笔淡化到另一个画笔。无论实际画笔是什么,这都可以工作 - 例如,您可以从径向渐变淡化为线性渐变,或者从瓷砖画笔淡化为可视画笔。

  2. 您可以通过设置各个属性的动画来淡化两个相似结构的画笔,如您的初始示例所示。对于故事板的“To”组件,只需使用Binding到源画笔的给定组件即可。这具有结构平滑过渡的优点。例如,如果您在具有两个不同中心点的两个径向笔刷之间淡入淡出,则径向中心实际上将移过对象而不是一个淡出而另一个淡入。

答案 1 :(得分:0)

完全猜测,没有测试支持它,使用大量的批判性思维等......但你究竟是如何在一个渐变和另一个渐变之间“淡化”?我的意思是它们是对象实例,每个可能有许多不同的渐变点等。除非MS内置一些神奇的酱汁,动画师不会检查这个(我也不确定你能设置一个满足所有顾客的算法)。

而是尝试设置渐变并为颜色之间的渐变点设置动画。

答案 2 :(得分:0)

您可以使用ColorAnimation将其从一种颜色设置为另一种颜色。

相关问题