WPF одушевленный линейный градиент - PullRequest
1 голос
/ 10 ноября 2009

Вы можете анимировать линейный градиент:

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

Хорошо, пока. Вы можете установить цвет, чтобы оживить его. Как вы можете установить свойство To, чтобы указать к градиентному ресурсу у вас уже есть?

Можно ли использовать целевое свойство borderbrush без смещения? В большинстве случаев мне нужно полностью переключить градиент.

EDIT:

Хорошо, тогда как я могу использовать цветовую анимацию для перехода от одного градиентного смещения к другому, где целевой цвет не жестко закодирован, а исходит от ресурса?

пример:

  <!-- @ 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 при наведении мыши на mouseoverbrush, как я могу это сделать?

Ответы [ 3 ]

3 голосов
/ 27 декабря 2009

У вас есть два варианта, в зависимости от желаемого эффекта и от того, знаете ли вы структуру задействованных кистей:

  1. Вы можете плавно переходить от любой кисти к другой, используя <VisualBrush> с холстом, содержащим два перекрывающихся прямоугольника 1x1, нарисованных каждой из двух кистей. Вы можете анимировать непрозрачность двух прямоугольников в пределах VisualBrush, чтобы они постепенно исчезали с одной кисти на другую. Это работает независимо от того, какие на самом деле кисти - например, вы можете перейти от радиального градиента к линейному градиенту или от мозаичной кисти к визуальной кисти.

  2. Вы можете постепенно исчезать между двумя кистями схожей структуры, анимируя индивидуальные свойства, как показано в исходном примере. Для компонента «Кому» раскадровки просто используйте Binding для данного компонента исходной кисти. Это имеет преимущество плавного перехода структуры. Например, если вы замираете между двумя радиальными кистями с двумя разными центральными точками, радиальный центр будет фактически перемещаться поперек объекта, а не один исчезает, а другой исчезает.

0 голосов
/ 10 ноября 2009

Вы можете использовать ColorAnimation для анимации его от одного цвета к другому.

0 голосов
/ 10 ноября 2009

Полное предположение, никаких тестов для подтверждения, использования с кучей критического мышления и т. Д., Но как именно вы подразумеваете "исчезать" между одним градиентом и другим? Я имею в виду, что это экземпляры объектов, у каждого может быть много разных точек градиента и т. Д. Если MS не встроил какой-то волшебный соус, аниматор не будет проверять это (и я не уверен, что вы могли бы установить алгоритм, который удовлетворит всех их клиентов).

Скорее попробуйте установить градиент и анимировать градиентные точки между цветами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...