Как сделать штрихи исчезающими на InkCanvas

Я совершенно новичок на этом форуме и все еще новичок в WPF.

Я работаю над проектом, который требует анимации штрихов на чернильном холсте. Одна из требуемых анимаций — «исчезновение». Я хочу, чтобы выделенные штрихи постепенно исчезали по нажатию кнопки, но появлялись в конце анимации.

Поскольку для обводки нет свойства непрозрачности, я попытался использовать класс ColorAnimation вместе с раскадровками. Мне не удалось заставить этот код работать, так как я не могу настроить таргетинг на штрихи, используя их самих или их имена, поскольку у них их нет.

Прямо сейчас я думаю реализовать эту систему, постепенно меняя цвет штрихов на цвет фона, а в конце возвращая его к исходному значению. Это дорогостоящий цикл, но у меня нет других идей.

Буду признателен, если есть какие-либо другие решения, которыми вы могли бы поделиться со мной.

Заранее спасибо.

Редактировать: я не ответил на комментарии, так как имел дело с другими частями того же проекта.

Я пытался использовать альфа-значения, хранящиеся в DrawingAttributes, но не могу изменить это значение, поскольку оно не является переменной. То же самое касается значений RGB. Я понятия не имею, как заставить штрихи исчезать в цикле. Я уже реализовал большую часть проекта, поэтому мне просто нужно что-то, чтобы медленно заставить их исчезнуть. Ниже вы можете найти пример, где я изменяю сам штрих, чтобы анимировать его.

 private int dropOffset = 1;
    private void DropAnimation()
    {
        m = new Matrix();
        m.Translate(0, dropOffset);

        animStrokes.Transform(m, false);
        YChange += dropOffset;
        dropOffset += 2;
    }

А в другом классе у меня

public void AnimateStrokes(Dispatcher canvasDispatch)
    {
        Stopwatch initial = Stopwatch.StartNew();
        while (initial.ElapsedMilliseconds < 2000)
        {
            foreach (Animation ai in AnimationList)
            {
                ai.animateSelected();
            }
            canvasDispatch.Invoke(new Action(() => { }), DispatcherPriority.Render);
            Thread.Sleep(50);
        }
        foreach (Animation a in AnimationList)
        {
            a.undoAnimation();
        }
        canvasDispatch.Invoke(new Action(() => { }), DispatcherPriority.Render);
    }

Я знаю, что так проходить мимо диспетчера вредно, но пока достаточно.

Еще раз спасибо заранее.


person Aral Can Kaymaz    schedule 29.12.2011    source источник
comment
Вы можете отредактировать альфа-значение цвета обводки, но вам все равно придется перебирать их в цикле. Вы говорите, что это дорогостоящий цикл, но вы сравнивали его или считаете, что он слишком медленный?   -  person keyboardP    schedule 29.12.2011


Ответы (1)


InkCanvas1.DefaultDrawingAttributes.Color = Color.FromArgb(100, 0, 255, 255);

Может быть немного поздно, но тем не менее помогите другим! 100 — это альфа-значение, которое в основном действует как значение непрозрачности!! Запутайтесь с этим, и вы сможете изменить прозрачность своих штрихов :)

person Aaron Murphy    schedule 15.04.2013