Как заставить штрихи исчезать на InkCanvas - PullRequest
0 голосов
/ 29 декабря 2011

Я совершенно новичок в этом форуме и все еще новичок в 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);
    }

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

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

1 Ответ

0 голосов
/ 15 апреля 2013
InkCanvas1.DefaultDrawingAttributes.Color = Color.FromArgb(100, 0, 255, 255);

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

...