XAML でいくつかの状態が定義されている Silverlight 4 アプリケーションがあり、VisualStateManager.GoToState(this, "stateName", false)
期待どおりに動作するものを使用しています。
ただし問題は、状態のプロパティの一部が UI にバインドされているため、ユーザーが色などをカスタマイズできることです。その状態(状態Aとしましょう)でこれを行うことができます。変更は、別の状態に変更してから状態 A に戻るまで反映されません。問題は、UI から基礎となるプロパティへのバインドではなく (期待値があります)、状態を更新する必要があることです。または、少なくともそれが私の結論です。
最初は試しVisualStateManager.GoToState(this, "StateA", false)
てみたのですが、 「コントロールがすでにstateName状態にある場合、GoToStateはアクションを実行せずにtrueを返す」ことがわかりました。
それから私は成功しませんでしたが、それは本当に良い解決策ではありません:
VisualStateManager.GoToState(this, "StateB", false);
VisualStateManager.GoToState(this, "StateA", false);
更新を強制する方法や回避策を知っている人はいますか?
更新:
依存関係プロパティが変更されたときに、以下の回答と次のコードを使用して組み合わせて動作させることができました。Storyboard.Stop()
とはStoryboard.Begin()
、UI から設定されたプロパティの新しい値を考慮しているように見えました。
if (VisualStateManager.GoToState(this, "StateA", false))
{
VisualState stateA = (VisualState)VisualStateGroup.States[0];
stateA.Storyboard.Stop();
stateA.Storyboard.Begin();
}