2011-12-29 37 views
0

私はこのフォーラムを初めて使いましたが、まだWPFの初心者です。InkCanvasでストロークを消す方法

私はインクキャンバスのストロークをアニメーション化する必要があるプロジェクトに取り組んでいます。必要なアニメーションの1つは「消えていく」ことです。選択したストロークをボタンをクリックすると徐々に消えてしまいますが、アニメーションの最後に表示したいと思います。

ストロークに不透明プロパティがないため、私はストーリーボードと一緒に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); 
    } 

を持って、私はそれがこのようなディスパッチャを渡すために健康的ではないことを知っているが、それは今のところ十分です。

もう一度お返事ありがとうございます。

+0

コードを投稿してください – Paparazzi

+0

ストロークカラーのアルファ値を編集することはできますが、それでもループする必要があります。あなたはそれがコストのかかるループだと言いますが、それをベンチマークしたのですか、それとも遅すぎると仮定していますか? – keyboardP

答えて

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

少し遅くなるかもしれませんが、他の人には役に立たないかもしれません! 100は、基本的に不透明度のように機能するアルファ値です!あなたはストロークの透明度を変更することができます:)

関連する問題