1

キュー (スペースを押す) に基づいて不透明度を変更するアニメーション コントロールを作成しようとしています。

アニメーション自体は正常に動作します。キープレスに基づいて、不透明度がアニメーション化し、コントロールが表示されます。残りのコンテンツを含むグリッド コントロールにアニメーションを配置しました。

問題は次のとおりです。アニメーションが終了した後、手動で (コード ビハインドから) true に設定した後でも、グリッドの IsEnabled プロパティは「false」のままです。このコマンドは例外を発生させませんが、実際にはプロパティも変更しません。

その後、同じアニメーションをもう一度実行しますが、逆にすると、値は実際には「true」になります。しかしもちろん、その瞬間にはすでにフェードアウトしています。

void Initialize()
{
    // fade animation storyboard
    FadeAnimation = new DoubleAnimation(0.0, 1.0, 
        new Duration(TimeSpan.FromSeconds(0.7)))
    { FillBehavior = FillBehavior.HoldEnd };

    FadeStoryboard.Children.Add(FadeAnimation);
    Storyboard.SetTargetName(FadeAnimation, grid.Name);
    Storyboard.SetTargetProperty(FadeAnimation, 
    new PropertyPath(Grid.OpacityProperty));
}


// flipping the animation around
void InputManager_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Space)
    {
        if (!ViewModel.IsActive)
        {
            FadeAnimation.From = grid.Opacity;
            FadeAnimation.To = 1.0;
            FadeStoryboard.Begin(this);
            ViewModel.IsActive = true;
        }
        else if (ViewModel.IsActive)
        {
            FadeAnimation.From = grid.Opacity;
            FadeAnimation.To = 0.0;
            FadeStoryboard.Begin(this);
            ViewModel.IsActive = false;
        }
    }
}

[編集] いくつかの追加のデバッグを通じて、フェードイン時に有効に false にアクティブに設定し、フェードアウト時に true に設定するのはアニメーションであることがわかりました。これは、私がやりたいこととは正反対です。

[編集 2] アニメーションを完全に捨てて、可視性を Hidden との間で変更すると、まったく同じ問題が発生します。非表示にすると有効になり、可視にすると無効になります。

4

2 に答える 2

1

DependencyProperties には優先順位が関連付けられており、アニメーションはリストの上位にあります。

  • プロパティ システム強制
  • アクティブなアニメーション、またはホールド動作のあるアニメーション。
  • ローカル値
  • TemplatedParent テンプレート プロパティ
  • 暗黙的なスタイル
  • スタイルトリガー
  • テンプレート トリガー
  • スタイル セッター
  • デフォルト (テーマ) スタイル
  • 親から継承
  • 依存関係プロパティ メタデータの既定値

デフォルトでは、アニメーションには HoldEnd の FillBehavior があります。これは、アニメーションが終了した値にとどまることを意味します。したがって、あなたの場合、 IsEnabled の値を変更しようとしていますが、より高いレベルの優先順位で保持されています。これを解決するためにできることは次のとおりです。

IsEnabled トリガーに ExitAction を追加してストーリーボードを停止し、アニメーションがアニメーションの最後に持っていた値をアサートし続けないようにして、ローカル値スタイルを適用できるようにします。このオプションには、(#1 のように) スタイルを繰り返す必要がなく、アニメーションを逆にする必要もない (#2 のように) という利点があります。

バックアップ情報の詳細とリンクは、ここにあります。

于 2013-04-29T08:26:06.393 に答える
1

ビューモデルに問題があることが判明しました。より正確に言うと、より高いレベルのビューモデルが同時により高いレベルのコントロールを無効にしていました。そのため、この下位レベルのものを有効にすることはできませんでした。

于 2013-04-29T09:16:29.657 に答える