Windows phone 7 WP7控件:从墓碑恢复后何时设置VisualState?
我的问题很简单:什么时候(在什么事件上?)我能确保控件已完全加载,并且还有它的状态和模板吗?Windows phone 7 WP7控件:从墓碑恢复后何时设置VisualState?,windows-phone-7,visualstatemanager,tombstoning,Windows Phone 7,Visualstatemanager,Tombstoning,我的问题很简单:什么时候(在什么事件上?)我能确保控件已完全加载,并且还有它的状态和模板吗? 我为什么要问: 在从墓碑恢复后,我正在尝试恢复我自己的WP7控件的状态。此控件看起来像每周视图中的日历。在此日历中,您可以选择许多显示为彩色矩形的项目 如果我选择其中任何一个,然后转到tombstone并返回页面,我的控件似乎忘记了选择了哪个矩形。事实上,它没有忘记数据本身,但是矩形忘记了它们的选择状态 从墓碑恢复后,我尝试通过将VisualState设置为“Selected”(在任何其他场景中都
我为什么要问: 在从墓碑恢复后,我正在尝试恢复我自己的WP7控件的状态。此控件看起来像每周视图中的日历。在此日历中,您可以选择许多显示为彩色矩形的项目 如果我选择其中任何一个,然后转到tombstone并返回页面,我的控件似乎忘记了选择了哪个
矩形。事实上,它没有忘记数据本身,但是矩形
忘记了它们的选择状态
从墓碑恢复后,我尝试通过将VisualState
设置为“Selected”(在任何其他场景中都有效)来选择矩形。我发现它失败了,因为VisualStateManager
找不到“已选择的”
状态
我知道这很棘手,因为当从墓碑回来时,控件的构建与任何“正常”情况下都不完全一样。(例如,Bindings
和Templates
不按相同的顺序应用)但到目前为止,我始终可以相信,当启动FrameworkElement.Loaded
时,我已经准备好了控件。现在看来,VisualState
不是。(我试图从已加载的
事件处理程序设置状态,但结果相同,VisualStateManager.GoToState
返回值为false
)
我还能做什么呢?这是个棘手的问题!我还遇到过UI事件在完全构建UI之前触发的问题,请参阅。我的一般方法是处理LayoutUpdated
事件,该事件在每次更新可视化树时触发。您将发现此事件在加载的事件之前和之后多次激发
当触发Layoutupdated
事件时,您可以检查可视状态更改是否有效,如果有效,则不再处理该事件。如果没有,继续尝试
在加载的事件中,尝试以下操作:
// try to set the state
if (VisualStateManager.GoToState(myControl, "myState") == false)
{
// if failed, wait for the next LayoutUpdated event
EventHandler updateHandler = null;
updateHandler = (s, e2) =>
{
if (VisualStateManager.GoToState(myControl, "myState") == false)
{
myControl.LayoutUpdated -= updateHandler;
}
};
myControl.LayoutUpdated += updateHandler;
}
哈!万分感谢!从昨天起,我的控件的结构发生了变化,但该方法有效:)再次感谢!