Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将PivotItem转换为Usercontrol以提高WP7中的加载性能_C#_Windows Phone 7 - Fatal编程技术网

C# 将PivotItem转换为Usercontrol以提高WP7中的加载性能

C# 将PivotItem转换为Usercontrol以提高WP7中的加载性能,c#,windows-phone-7,C#,Windows Phone 7,My MainPage.xaml是一个包含3个数据透视项的数据透视页。目前,它正在为主页构造函数上的每个数据透视项加载所有必需的内容。这是不好的,因为它加载了很多不必要的东西 阅读并建议我只加载第一个数据透视项,然后加载其余的数据透视项。具体而言: 通过按需加载pivot控件内容来提高pivot应用程序的性能,而不是在启动时加载所有内容。一种解决方案是从每个PivotItem控件获取内容并转换为UserControls。然后可以在根透视控件上订阅LoadingPivotItem事件。接下来,在事

My MainPage.xaml是一个包含3个数据透视项的数据透视页。目前,它正在为主页构造函数上的每个数据透视项加载所有必需的内容。这是不好的,因为它加载了很多不必要的东西

阅读并建议我只加载第一个数据透视项,然后加载其余的数据透视项。具体而言:

通过按需加载pivot控件内容来提高pivot应用程序的性能,而不是在启动时加载所有内容。一种解决方案是从每个PivotItem控件获取内容并转换为UserControls。然后可以在根透视控件上订阅LoadingPivotItem事件。接下来,在事件处理程序中,实例化适当的UserControl并将其设置为PivotItem内容

如果我采纳这个建议:

private void OnLoadingPivotItem(object sender, PivotItemEventArgs e)
{
if (e.Item.Content != null)
{
    // Content loaded already
    return;
}

Pivot pivot = (Pivot)sender;

if (e.Item == pivot.Items[0])
{
    e.Item.Content = new Page1Control();
}
else if (e.Item == pivot.Items[1])
{
    e.Item.Content = new Page2Control();
}
else if (e.Item == pivot.Items[2])
{
    e.Item.Content = new Page3Control();
}
}
我应该使用创建类PageXControl?它应该以某种方式从主页类继承吗

如何从每个PivotItem控件获取内容并转换为UserControls


谢谢

您可以创建自己的数据透视项,它将从数据透视项继承。我根据VS中的默认Pivot项目制作了一个示例,它将两个Pivot项目拆分为各自的类:-


将数据透视项的内容提取到用户控件中实际上非常简单。首先,为每个数据透视项创建一个新的UserControl。然后将数据透视项的内容从数据透视项移动到用户控件中。然后,在指定的
OnLoadingPivotItem
方法中创建控件。我在GitHub上创建了一个小项目,向您展示如何做到这一点。见:

如您所见,我从基类派生了UserControls,因为它们在语义上是相同的。然而,这并不是必须的,只从UserControl继承是可以的


与将数据透视项本身提取到自定义控件中的方法相比,我更喜欢这种方法。

谢谢。我注意到您对透视页面代码使用了
PivotItem
,而不是
UserControl
。有什么区别吗?我认为如果你把许多控件放在一起形成另一个控件,你会使用UserControl,但是因为你只对PivotItem感兴趣,所以从中派生是有意义的。