Mam aplikację Silverlight 4, w której mam określone stany zdefiniowane w XAML i używam VisualStateManager.GoToState(this, "stateName", false)
, która działa zgodnie z oczekiwaniami.Jak odświeżyć bieżący stan za pomocą VisualStateManager
Problem polega jednak na tym, że niektóre właściwości stanu są powiązane z interfejsem użytkownika, aby użytkownik mógł dostosowywać takie elementy, jak kolor. Można to zrobić w tym stanie (powiedzmy, stan A). Zmiany nie są odzwierciedleniem, dopóki nie przejdę do innego stanu, a następnie z powrotem do stanu A. Problemem nie jest powiązanie z interfejsu do właściwości bazowych (mają oczekiwane wartości), ale stan musi zostać odświeżony - lub przynajmniej taki jest mój wniosek.
Najpierw próbowałem po prostu VisualStateManager.GoToState(this, "StateA", false)
, ale okazało się, że "if the control is already in the stateName state, GoToState takes no action returns true".
Potem próbowali bez powodzenia, chociaż nie jest to naprawdę miłe rozwiązanie:
VisualStateManager.GoToState(this, "StateB", false);
VisualStateManager.GoToState(this, "StateA", false);
Czy ktoś wie jak mogę wymusić odświeżenie lub obejścia problemu?
AKTUALIZACJA: Udało mi się zmusić go do pracy z kombinacją poniższej odpowiedzi i użyciem następującego kodu po zmianie właściwości zależności. Wydaje się, że Storyboard.Stop()
i Storyboard.Begin()
uwzględniają nową wartość właściwości ustawionych z interfejsu użytkownika.
if (VisualStateManager.GoToState(this, "StateA", false))
{
VisualState stateA = (VisualState)VisualStateGroup.States[0];
stateA.Storyboard.Stop();
stateA.Storyboard.Begin();
}