【问题标题】:How to make strokes disappear on an InkCanvas如何使笔画在 InkCanvas 上消失
【发布时间】:2011-12-29 14:30:47
【问题描述】:

我对这个论坛完全陌生,而且还是 WPF 的初学者。

我正在开展一个项目,该项目需要对 inkcanvas 上的笔划进行动画处理。所需的动画之一是“消失”。我想让选中的笔画随着点击按钮逐渐消失,但出现在动画结束时。

由于笔画没有 opacity 属性,我尝试将 ColorAnimation 类与情节提要一起使用。我无法使这段代码正常工作,因为我无法使用它们自己或使用它们的名称来定位笔画,因为它们没有任何内容。

现在我正在考虑通过逐渐将笔划的颜色更改为背景的颜色,最后将其重置为初始值来实现这个系统。这是一个代价高昂的循环,但我没有其他想法。

如果您有任何其他解决方案可以与我分享,我将不胜感激。

提前致谢。

编辑:我没有回答 cmets,因为我正在处理同一项目的其他部分。

我尝试使用存储在 DrawingAttributes 中的 Alpha 值,但我无法更改该值,因为它不是变量。 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);
    }

我知道这样通过调度员是不健康的,但现在就足够了。

再次提前致谢。

【问题讨论】:

  • 您可以编辑描边颜色的 alpha 值,但您仍然需要遍历它们。您说这是一个代价高昂的循环,但您是否对其进行了基准测试,或者您认为它太慢了?

标签: wpf animation inkcanvas coloranimation


【解决方案1】:
InkCanvas1.DefaultDrawingAttributes.Color = Color.FromArgb(100, 0, 255, 255);

可能有点晚了,但仍然可以帮助他人! 100 是 alpha 值,它基本上就像一个不透明度值!!搞砸了,你将能够改变你的笔画的透明度:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多