Windows phone 7 TiltEffect(工具箱中)在弹出窗口中使用时会导致泄漏

Windows phone 7 TiltEffect(工具箱中)在弹出窗口中使用时会导致泄漏,windows-phone-7,popup,memory-leaks,silverlight-toolkit,Windows Phone 7,Popup,Memory Leaks,Silverlight Toolkit,我知道内联代码更可取,但需要一堆代码来表明问题实际发生(例如泄漏检测)。项目可在此处下载: 下面是正在发生的事情: 出于某种原因,使用TiltEffect的弹出窗口会导致最后一个实例(我猜是最后一个子实例)泄漏。我已经创建了一个小的POC应用程序来显示这一点 在这个(我能创建的最小复制)中,您可以执行以下操作: 点击屏幕上的按钮-它只是页面上的一个按钮 --->将出现另一个按钮(此按钮位于弹出窗口上) 点击刚刚出现的第二个按钮 ---->第二个按钮将消失 重复步骤1和2几次 轻触页面标题几次(

我知道内联代码更可取,但需要一堆代码来表明问题实际发生(例如泄漏检测)。项目可在此处下载:

下面是正在发生的事情:

出于某种原因,使用TiltEffect的弹出窗口会导致最后一个实例(我猜是最后一个子实例)泄漏。我已经创建了一个小的POC应用程序来显示这一点

在这个(我能创建的最小复制)中,您可以执行以下操作:

  • 点击屏幕上的按钮-它只是页面上的一个按钮
  • --->将出现另一个按钮(此按钮位于弹出窗口上)

  • 点击刚刚出现的第二个按钮
  • ---->第二个按钮将消失

  • 重复步骤1和2几次

  • 轻触页面标题几次(这会导致GC.Collect()

  • 查看输出窗口–您将看到Grid的一个实例和MyUserControl的一个实例正在泄漏

  • 在我看来,最后一个实例保存在内存中

    如果从弹出窗口中删除倾斜效果(注释掉调用倾斜效果的行),您将看到实例被释放(输出窗口将告诉您内存中没有引用)

    我不知道为什么会这样。。。尝试调试到TiltEffect,似乎所有事件都已解除挂钩

    下面是打开弹出窗口并隐藏它的代码(其余代码处理内存泄漏和哑用户控件):


    我不知道如何修复漏洞,但我可以提出一个替代方案。我写了一个附加的行为,增加了倾斜的元素,你。我认为使用工具箱更容易,只需将属性附加到元素:

     <Button local:MetroInMotion.Tilt="6"/>
    
    
    

    您还可以根据希望元素倾斜的程度进行配置。

    好的,问题是倾斜效果中的故事板包含对我执行的其他测试中最后一个动画对象的引用,只有在您实际点击可倾斜UI对象时才会发生泄漏。好的,问题是倾斜效果中的故事板包含对最后一个动画对象的引用。这很酷!看起来它确实需要分别应用于每个对象,但对我个人来说,这不如现有的实现好(我知道有一半的时间我会忘记将其添加到元素中)。@ShaharPrish是的-你确实分别应用于每个对象,但说实话-我喜欢这样!我不喜欢工具箱根据类型应用效果的方式。
     <Button local:MetroInMotion.Tilt="6"/>