Silverlight でカスタム依存関係プロパティをアニメーション化できますか?
-
09-06-2019 - |
質問
本当に明らかな何かが欠けている可能性があります。コンテンツがいくつかの依存関係プロパティに従ってレイアウトされるカスタムパネルを作成しようとしています(依存関係プロパティがあると仮定しています) 持っている DP になるのは、アニメートできるようになりたいからです。)
ただし、これらのプロパティの両方をアニメーション化するためにストーリーボードを実行しようとすると、Silverlight は致命的なエラーをスローします。ただし、そのうちの 1 つだけをアニメーション化しようとすると、正常に動作します。また、プロパティの 1 つと「組み込み」プロパティ (不透明度など) をアニメーション化しようとしても、それは機能します。しかし、両方のカスタム プロパティをアニメーション化しようとすると、致命的なエラーが発生します。
他にこれに遭遇した人はいますか?
編集:
2 つの DP は ScaleX と ScaleY で、どちらもダブルです。これらは、パネル内の子の X および Y 位置をスケールします。そのうちの 1 つがどのように定義されているかを次に示します。
public double ScaleX
{
get { return (double)GetValue(ScaleXProperty); }
set { SetValue(ScaleXProperty, value); }
}
/// <summary>
/// Identifies the ScaleX dependency property.
/// </summary>
public static readonly DependencyProperty ScaleXProperty =
DependencyProperty.Register(
"ScaleX",
typeof(double),
typeof(MyPanel),
new PropertyMetadata(OnScaleXPropertyChanged));
/// <summary>
/// ScaleXProperty property changed handler.
/// </summary>
/// <param name="d">MyPanel that changed its ScaleX.</param>
/// <param name="e">DependencyPropertyChangedEventArgs.</param>
private static void OnScaleXPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
MyPanel _MyPanel = d as MyPanel;
if (_MyPanel != null)
{
_MyPanel.InvalidateArrange();
}
}
public static void SetScaleX(DependencyObject obj, double val)
{
obj.SetValue(ScaleXProperty, val);
}
public static double GetScaleX(DependencyObject obj)
{
return (double)obj.GetValue(ScaleXProperty);
}
編集:InvalidateArrange の呼び出し (どのような場合でも絶対に必要です) の呼び出しを使用した場合と使用しない場合で試してみましたが、結果は同じでした。イベント ハンドラーは、致命的なエラーが開始される前に呼び出されることさえありません。
解決
これは Silverlight 2 Beta 2 の文書化されたバグです。同じオブジェクト上の 2 つのカスタム依存関係プロパティをアニメーション化することはできません。
他のヒント
OnPropertyChanged の InvalidateArrange をコメントアウトして、何が起こるかを確認してみます。
私自身の質問に答えるのが悪くないことを願っています。
Silverlight 2 リリース候補 0 が本日リリースされました。この問題をテストしたところ、修正されたようです。テスト パネルの両方のカスタム DP が適切にアニメーション化できるようになり、アプリは期待どおりに動作します。それはいいですね。
この RC は開発者ベースの RC にすぎないため、Silverlight の標準ビルドは更新されていないことに注意してください。ただし、来月には完全にリリースされると思います。