gpt4 book ai didi

windows-phone-7 - WP7 控件 : When to set VisualState after recovering from Tombstone?

转载 作者:行者123 更新时间:2023-12-03 23:37:44 27 4
gpt4 key购买 nike

我的问题很简单:WHEN (在什么事件上?)我可以确定控件已完全加载并且还具有其状态和模板吗?


我为什么要问:

从墓碑恢复后,我正在尝试恢复我自己的 WP7 控件的状态。此控件看起来像每周 View 中的日历。在此日历中,您可以选择许多显示为彩色矩形的项目。

如果我选择其中任何一个,然后转到 tombstone 并返回页面,我的控件似乎忘记了哪个 Rectangles被选中。事实上,它并没有忘记数据本身,而是 Rectangles忘记了他们选择的状态。

从墓碑恢复后,我尝试选择 Rectangles通过设置他们的VisualState到“选定”(适用于任何其他情况)。我发现它失败了,因为 VisualStateManager找不到 "Selected"状态。

我知道这很棘手,因为当从墓碑回来时,控件的构建与任何“正常”情况下的完全不同。 (例如 BindingsTemplates 不能以相同的顺序应用)但直到现在我都可以相信,当 FrameworkElement.Loaded被解雇了,我已经准备好控制了。现在好像 VisualState不是。 (我尝试从 Loaded 事件处理程序设置状态,但结果相同,VisualStateManager.GoToState 返回 false 。)

我还能做什么?

最佳答案

这是一个棘手的问题!我也遇到过在 UI 本身完全构建之前触发 UI 事件的问题,请参阅 this blog post for an example .我对此的一般方法是处理 LayoutUpdated事件,每次更新可视化树时触发。你会发现这个事件在 Loaded 之前和之后触发了多次。事件。

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;
}

关于windows-phone-7 - WP7 控件 : When to set VisualState after recovering from Tombstone?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9824589/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com