0

私はこの問題を抱えており、乗り越えられないようです。多分誰かが助けることができます。

DoubleAnimations を動的に作成するメソッドを作成しています。配列からさまざまなユーザー コントロールの配列をフィードすると、StoryBoard に追加する DoubleAnimations が自動的に作成されます。

つまり、 PlaneProjection.RotationYPropertyControl.OpacityPropertyの 2 種類の PropertyPath を挿入する必要があります。それらに対してStoryboard.SetTargetを別の方法で設定する必要があるため、メソッドで TargetProperty を呼び出す PropertyPath 引数を比較する方法が必要です。ここで説明するのは、私がコードでやろうとしていることの一部です:

if (TargetProperty == new PropertyPath (PlaneProjection.RotationYProperty))
{
    // Do some code
    projection = control.Projection as PlaneProjection;
    Storyboard.SetTarget(doubleAnimation, projection);
}
else if (TargetProperty == new PropertyPath (Control.OpacityProperty))
{
    Storyboard.SetTarget(doubleAnimation, control);
}

bool を回避策として使用することでメソッドを機能させることができましたが、可能であればメソッドの引数の数を減らすことをお勧めします。

私は使用してみました:

if (TargetProperty.ToString() == new PropertyPath (PlaneProjection.RotationYProperty).ToString())

... と...

if (TargetProperty.Equals(new PropertyPath (PlaneProjection.RotationYProperty)))

...しかし、どれも機能しませんでした。これを回避するためのアイデアはありますか?私は何か間違ったことをしていますか?

前もって感謝します!

4

3 に答える 3

0

まず、引数が単なるプロパティになるようにシステムを再設計できませんでしたか? 最初にプロパティで必要な処理をすべて行ってから、生成PropertyPathしてアニメーションに割り当てます。

それまでは、`Path` プロパティを比較してみてください。

OK、文字列をコンストラクターに渡すことによって作成されたPath場合にのみ一致するように見えます。PropertyPath

WPF でそれらを比較する別の方法がありますが、Silverlight では使用できません。パス データは、コンストラクターに同じ依存関係プロパティを渡すことによって作成されたPathParameters2 つのインスタンス間で一致する要素を持つ、呼び出された配列にあります。PropertyPathSilverlight では へのアクセスが許可されないためPathParameters、どこかに別のヘルパー メソッドがない限り ( PropertyPathConverterを見ましたが、役に立たないようです)、唯一のオプション (リフレクション以外) は、パスを比較する必要をなくすことです。

于 2013-06-27T12:44:20.760 に答える
0

どちらの場合も同じロジックを使用してアニメーションを作成する場合は、ターゲット プロパティをメソッドに直接渡します。

public void AssignAnimation(DependencyObject property)
{
    // Create the doubleAnimation
    // ...

    // Assign it
    Storyboard.SetTarget(doubleAnimation, property);
}

次に、プロパティで直接呼び出す必要があります。

AssignAnimation(control);
AssignAnimation(control.Projection);

異なるロジックを使用している場合は、2 つの別々の方法を使用することをお勧めします。コードが読みやすく、維持しやすくなります。

于 2013-06-27T16:34:36.330 に答える