Заставить анимацию работать на отключенном элементе управления - PullRequest
0 голосов
/ 03 апреля 2012

Я использую анимацию для изменения цвета фона и переднего плана элемента управления при каждом изменении его значения; он работает нормально, за исключением элементов управления, которые отключены. Вот анимация, которую я использую

<Storyboard
    x:Key="Anim"
    AutoReverse="True"
    Duration="500"
    FillBehavior="Stop">
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background">
        <DiscreteObjectKeyFrame KeyTime="0:0:0.002">
            <DiscreteObjectKeyFrame.Value>
                <SolidColorBrush Color="Red" />
            </DiscreteObjectKeyFrame.Value>
        </DiscreteObjectKeyFrame>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground">
        <DiscreteObjectKeyFrame KeyTime="0:0:0.002">
            <DiscreteObjectKeyFrame.Value>
                <SolidColorBrush Color="White" />
            </DiscreteObjectKeyFrame.Value>
        </DiscreteObjectKeyFrame>
    </ObjectAnimationUsingKeyFrames>
</Storyboard>

Я устанавливаю цель для этой анимации во время выполнения, как это -

Storyboard anim = this.FindResource("Anim") as Storyboard;
if (anim != null)
{
    anim.SetValue(Storyboard.TargetProperty, animationTarget);
}

и всякий раз, когда значение изменяется, я делаю

_animation.Begin();

Обратите внимание, что целевой контроль может быть другого типа, например TextBox, DropDown, CheckBox и т. Д. И могут быть включены или отключены на основе свойства ViewModel.

Как я могу заставить эту анимацию работать для отключенных элементов управления?

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Я думаю, причина того, что он не работает для отключенных элементов управления, заключается в том, что внутри стиля элемента управления, когда он находится в отключенном визуальном состоянии, появляется Rectangle или Border, и онперекрывает панель Background.

Возможно, вам нужно создать прикрепленное свойство (например, DisabledBackground) и использовать TemplateBinding, чтобы связать его с Background отключенной панели.Тогда вам просто нужно анимировать это DisabledBackground свойство в прозрачный цвет.

0 голосов
/ 13 июня 2012

Я решил проблему довольно просто, используя BooleanAnimationUsingKeyFrames .Я добавил BooleanAnimationUsingKeyFrames в свою анимацию, поэтому, когда эта анимация применяется, элемент управления включается на короткий промежуток времени, анимация запускается и элемент управления снова отключается.

Здесь об этом пометили - Включение анимации для отключенных элементов управления

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