• DeferredLoadContentControl 推迟内容呈现 提供更好的用户体验


    这篇文章描述了一个简单的内容控件,可以用来推迟对其内容的呈现方式,Windows Phone 7 日提供更好的用户体验。
    我认为任何人作出了过渡期从仿真器硬件与 Windows Phone 7 的发展经历了同样的性能头痛。几方面性能点击硬次数是列表框的呈现方式,从 web 下载的图像。值得庆幸的是,有大量的博客张贴内容描述通过多种方式来减轻问题。Silverlight WP7 团队博客上的列表框的性能提示页提供了关于这一主题的许多有用资源的链接。
    底线是,真正 WP7 设备长颇有点要呈现的视觉的树,并作为开发人员,我们必须努力工作
    我认为用户体验真的遭受的一个领域是当用户导航到新的一页。如果页面包含一个相当复杂的用户界面 (也许 100 项的列表),它可以很长时间的新页面显示。这给电话已锁定,变得没有响应 (该我猜它在某些程度上有 !) 的印象。家伙们 Telerik 指出,使用控件引发的 ~1.6 秒加载时间的全景图。虽然最初加载应用程序时,将显示初始屏幕,后续页导航为用户提供一种感觉,电话做什么的缺乏任何视觉提示,表明手机正在做的东西还没死 !
    DeferredLoadContentControl
    DeferredLoadContentControl 提供了一个简单的解决方案,这一问题,被放置在该控件中的内容最初通过将其可见性设置为折叠隐藏的。处于折叠状态的元素不占用任何布局空间,因此如果具有很长的 '呈现' 时间元素处于折叠状态,这一次不再消耗。DeferredLoadContentControl 最初加载时,它将显示一个 '加载 … …' 的指标,然后将其内容的可见性设置为可见。内容呈现时,加载指示器是隐藏的。
    下面的图像比较与无 DeferredLoadContentControl 的用户体验:
    这篇文章描述了一个简单的内容控件,可以用来推迟对其内容的呈现方式,Windows Phone Whilst,此控件不会加载任何速度更快,在页上提供更好的用户体验,电话不能与之交互虽然内容正在加载,它意味着页面本身加载速度快得多,并因此为用户提供电话是响应速度更快的印象。
    DeferredLoadContentControl 的代码是一个非常简单的 ContentControl 扩展名。此控件的模板如下所示:
    <Style TargetType="local:DeferredLoadContentControl">
      <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
      <Setter Property="verticalContentAlignment" Value="Stretch"/>
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="local:DeferredLoadContentControl">
            <Grid>            
              <ContentPresenter  x:Name="contentPresenter"
                                  Content="{TemplateBinding Content}"
                                  ContentTemplate="{TemplateBinding ContentTemplate}"
                                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                  Margin="{TemplateBinding Padding}"/>
              <TextBlock x:Name="loadingIndicator"
                          Text="Loading ..."
                          VerticalAlignment="Top" HorizontalAlignment="Right"/>
            </Grid>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
    该模包含 ContentPresenter,负责显示控件的内容与 TextBlock 其中加载内容时显示一个离散的消息。你当然可以重新模板此控件添加图形加载指示器,只要您的元素具有名称"loadingIndicator"将显示 / 隐藏。

    代码也相当简单,这里是全部:
    public class DeferredLoadContentControl : ContentControl
    {
      private ContentPresenter _contentPresenter;
     
      private FrameworkElement _loadingIndicator;
     
     
      public DeferredLoadContentControl()
      {
        this.DefaultStyleKey = typeof(DeferredLoadContentControl);
     
        if (!DesignerProperties.IsInDesignTool)
        {
          this.Loaded += DeferredLoadContentControl_Loaded;
        }
      }
     
      public override void OnApplyTemplate()
      {
        base.OnApplyTemplate();
     
        _contentPresenter = this.GetTemplateChild("contentPresenter") as ContentPresenter;
        _loadingIndicator = this.GetTemplateChild("loadingIndicator") as FrameworkElement;
     
        if (!DesignerProperties.IsInDesignTool)
        {
          _contentPresenter.Visibility = Visibility.Collapsed;
        }
        else
        {
          // in design-mode show the contents 'grayed out'
          _contentPresenter.Opacity = 0.5;
        }
      }
     
      private void DeferredLoadContentControl_Loaded(object sender, RoutedEventArgs e)
      {
        // content has loaded, now show our content presenter
        _contentPresenter.Visibility = Visibility.Visible;
        _contentPresenter.LayoutUpdated += ContentPresenter_LayoutUpdated;
      }
     
      private void ContentPresenter_LayoutUpdated(object sender, EventArgs e)
      {
        // the content presenter has been rendered, hide the loading indicator
        _contentPresenter.LayoutUpdated -= ContentPresenter_LayoutUpdated;
        _loadingIndicator.Visibility = Visibility.Collapsed;
      }    
    }
    您可以从上面看到的内容演示者最初是隐藏的当加载的事件触发时,显示内容。当触发 LayoutUpdated 事件,我们知道的内容现在已变得和隐藏加载指示器。
    
    
    使用该控件不能再简单。只是放在 DeferredLoadContentControl 内的你慢负载内容:

    < local: DeferredLoadContentControl >
    
    
     
    
    
    < / local: DeferredLoadContentControl >
    
    
    此控件的一个很好的功能是当在设计器中使用,DeferredLoadContentControl 中包含的内容不能隐藏,相反在呈现 50%,且加载指示器将显示:
     
    声明:本文章是我学习并翻译的一篇国外的文章。
  • 相关阅读:
    OpenCV---在图片上加入文字
    DosBox 报错 this program requires dosxnt.exe to be in your path
    iOS开发-UITableView单选多选/复选实现1
    LeetCode第七题,Reverse Integer
    【PostgreSQL】PostgreSQL操作-psql基本命令
    Bootstrap的js插件之弹出框(popover)
    Qt Quick 图像处理实例之美图秀秀(附源代码下载)
    【甘道夫】并行化频繁模式挖掘算法FP Growth及其在Mahout下的命令使用
    用Visual Studio高版本号打开低版本号的project,转换时出现错误:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    如何安装ArchLinux
  • 原文地址:https://www.cnblogs.com/fxiaoquan/p/2588486.html
Copyright © 2020-2023  润新知