1

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

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

到目前为止还好。您可以设置一种颜色来对其进行动画处理。如何将 To 属性设置为指向您已有的渐变资源?

是否可以在没有偏移的情况下使用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 的背景设置动画,我该怎么做?

4

3 回答 3

2

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

  1. <VisualBrush>您可以使用具有包含两个重叠 1x1 矩形的画布的画布从任何画笔淡化到另一个画笔,并用两个画笔中的每一个画出。您可以对 中的两个矩形的不透明度进行动画处理,VisualBrush以从一个画笔淡化到另一个画笔。无论实际的画笔是什么,这都有效 - 例如,您可以从径向渐变渐变为线性渐变,或从平铺画刷渐变为视觉画刷。

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

于 2009-12-27T05:52:24.470 回答
-1

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

于 2009-11-10T11:58:31.880 回答
-1

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

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

于 2009-11-10T11:31:10.490 回答