布局更新的事件需要更新布局..无限循环



我正在使用C#,Silverlight,WP7。

我正在尝试向我的应用程序添加一个叠加层(类似于这个),该叠加层在每个系列的 LayoutUpdated 事件结束时叠加。

第一个问题是 LayoutUpdated 在每个控件事件上多次触发,无论是加载应用还是滚动或透视。我需要在最后一个 LayoutUpdated 事件之后执行我的代码。根据这个问题,对 Loaded 事件执行 BeginInvoke 将允许我的代码等待所有事件完成触发。我对此的理解正确吗?

另一个问题是更新布局...在布局更新事件上。这个问题说将有一个无限循环的 LayoutUpdated 事件触发,解决方案是设置一个 hasChanged 标志。但是标志需要由某些东西重置,以便在下一个控制事件中,对吧?

我很困惑如何实现解决这两个问题的解决方案。
提前谢谢。

我最终用一个解决方案解决了这两个问题。我添加了一个变量来跟踪上次调用此方法的时间,如果在阈值(例如 500 毫秒)内未调用该方法,它将该方法添加到调度程序。

这可确保无论 LayoutUpdated 事件被调用一次还是多次,该方法都将执行一次。 我将变量初始化到时间的开头,以便即使是第一次调用也会执行。

这是我的代码:

public class DesignChecker 
{
    private static DateTime lastCallTime = Datetime.MinValue;
    private static int minTimeSpan = 500; //set this threshold to your own needs
    public static void designChecker()
    {
        DateTime curTime = DateTime.UtcNow;
        TimeSpan span = curTime - lastCallTime;
        if (span.TotalMilliseconds < minTimeSpan)
        {
            lastCallTime = curTime;
        }
        else
        {
            lastCallTime = curTime;
            Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    doDesignCheck();
                });
        }
    }
}

最新更新