Ho un'applicazione Silverlight 4 dove ho alcuni stati definiti in XAML, e utilizzare VisualStateManager.GoToState(this, "stateName", false)
che funziona come previsto.Come aggiornare lo stato attuale con VisualStateManager
Il problema però è che alcuni di proprietà dello Stato sono destinati a l'interfaccia utente in modo che l'utente può personalizzare le cose come il colore. È possibile farlo quando ci si trova in quello stato (diciamo stato A). Le modifiche non si riflettono fino a quando non si passa a un altro stato, quindi si torna allo stato A. Il problema non è il binding dall'interfaccia utente alle proprietà sottostanti (hanno i valori previsti), ma piuttosto lo stato deve essere aggiornato - o almeno questa è la mia conclusione.
All'inizio ho appena provato VisualStateManager.GoToState(this, "StateA", false)
ma ho scoperto che "if the control is already in the stateName state, GoToState takes no action returns true".
Allora ho provato senza successo, anche se non è davvero una bella soluzione:
VisualStateManager.GoToState(this, "StateB", false);
VisualStateManager.GoToState(this, "StateA", false);
Qualcuno sa come posso forzare un aggiornamento o una soluzione?
UPDATE: sono riuscito a farlo funzionare con una combinazione della risposta qui sotto e utilizzando il seguente codice quando la proprietà di dipendenza modificata. Il Storyboard.Stop()
e Storyboard.Begin()
sembravano prendere in considerazione il nuovo valore delle proprietà impostate dall'interfaccia utente.
if (VisualStateManager.GoToState(this, "StateA", false))
{
VisualState stateA = (VisualState)VisualStateGroup.States[0];
stateA.Storyboard.Stop();
stateA.Storyboard.Begin();
}