我有一个Silverlight 4应用程序,在其中定义了一些XAML状态,并使用
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();
}