Silverlight 4.0 Windows Phone 7控件缓存-';元素已经是另一个元素的子元素';

Silverlight 4.0 Windows Phone 7控件缓存-';元素已经是另一个元素的子元素';,silverlight-4.0,windows-phone-7,Silverlight 4.0,Windows Phone 7,我正在尝试加快我的windows phone 7页加载时间。我有一个“静态”页面,在全景控件中动态创建了一个“静态”页面,这意味着内容永远不会更改 在第一次加载时,我查看我的配置文件,创建各个PanoramaItem控件并将它们添加到主Panorama控件中。我试图将列表保存在静态位置,以便初始创建只发生一次,并且在渲染页面时,我可以将完全渲染的版本添加到全景控件中 在第一次加载时可以正常工作,但当我尝试将缓存的全景项目添加到全景控件时,会收到消息“元素已经是另一个元素的子元素”。这是有道理的,

我正在尝试加快我的windows phone 7页加载时间。我有一个“静态”页面,在全景控件中动态创建了一个“静态”页面,这意味着内容永远不会更改

在第一次加载时,我查看我的配置文件,创建各个PanoramaItem控件并将它们添加到主Panorama控件中。我试图将列表保存在静态位置,以便初始创建只发生一次,并且在渲染页面时,我可以将完全渲染的版本添加到全景控件中

在第一次加载时可以正常工作,但当我尝试将缓存的全景项目添加到全景控件时,会收到消息“元素已经是另一个元素的子元素”。这是有道理的,因为我之前已经添加了。但我可以看到一种方法,断开与第一个全景控件的全景项目


我也可能把控制缓存的事情搞错了。。。如果有其他方法,请告诉我。

您可以使用Panorama.Items.Remove(pivotItem)进行此操作

例如

使用以下页面字段

PanoramaItem pi;
bool blahShown = false;
按下此按钮时,首先实例化并显示控件,然后在后续按下时移除并读取控件,而不实例化

private void button1_Click(object sender, RoutedEventArgs e)
{

    if (pi == null) {
        pi = new PanoramaItem();
        pi.Header = "blah";
    }

    if (blahShown) {
        Pano.Items.Remove(pi);
        blahShown = false;
    } else {
        Pano.Items.Add(pi);
        blahShown = true;
    }


}