【问题标题】:Electronic program guide (EPG) XAML电子节目指南 (EPG) XAML
【发布时间】:2014-12-29 15:17:29
【问题描述】:

有没有办法使用 WinPhone/WinRT 的 XAML 来实现 EPG?我看到很多 iOS/Android/Web 应用程序都在这样做,但没有 WP 或 WinStore。

  1. 它应该支持大量的项目(500个频道,每个节目N个节目,其中N是一周内的节目数)
  2. 内部可能有间隙,例如缺少某些程序或整行没有数据,但仍应显示空(透明)行。
  3. 每行中的项目数总是不同的(这就是 EPG 的工作原理)
  4. 加载速度应该很快并且滚动流畅。
  5. 内存使用应该正常,应用程序不应该因为许多绘制视图而崩溃,即元素需要虚拟化(重用)

GridView 看起来有点类似,但是有一些问题:

  • 要使项目大小不同 - 需要将 itemsPanel 切换为不支持虚拟化的 VariableSizedWrapGrid。有一些尝试解决这个问题,比如this,但不是原生/经过测试/广泛使用的解决方案
  • 不确定即使使用 VariableSizedWrapGrid 也可以支持间隙和缺少内容,看起来 GridView 在任何情况下都会填充间隙中的元素(创建空的透明项目听起来像是肮脏的 hack)
  • 很多项目都会出现问题,需要以某种方式进行增量加载
  • 内存使用/性能看起来不错

有人实现了吗?是否有任何组件/指南?哪个 xaml 控件将允许此操作以及性能/内存/时间如何显示?

【问题讨论】:

  • 你搞定了吗?

标签: wpf xaml windows-phone-7 windows-phone-8 windows-runtime


【解决方案1】:

不久前,我为UWP 做了一个 xaml epg,经过大量 POC,我使用了一个简单的 Grid 和 ScrollViewer,其中的列和行是从后面的代码动态生成的(大部分代码在后面的代码上)和几个ListView

我们还编写了自己的数据虚拟化(因为 Grid 不支持虚拟化)...

WinRT XAML 工具包 - 非常方便

这不是一项简单的任务,但它是可以持久的 :)

假设您有一些 EPG 数据模型,例如 - 列表(每个频道都有一个节目列表)

我所做的是 - 我创建了一个包含在 ScrollViewer 中的空网格,然后我为每个通道关联了一个 RowDefinition,然后将其添加到网格中(按通道索引)。

传播程序 - 更复杂(因为一些程序有时间重叠)。我将每个程序作为 Border 元素添加到通道 RowDefinitios - 通过 Margin to Time 计算放置它。

数据虚拟化 - 我所做的是计算用户可见的时间段(矩形类型的视口)然后,当用户滚动时 - 我只加载了与视口相交。例如,如果用户在 14:00-18:00 观看 EPg,我不会将 18:05 的节目加载到视图中。

选择程序(详情展开)-您可以在选择时简单地设置所选程序的宽度及其RowDefinition。

  • 这里的主要问题是键盘导航(这确实很难实现),但是如果您以触摸/鼠标为导向,那么您的导航问题就解决了。

【讨论】:

  • 我不会,但我会尝试解释主要思想
猜你喜欢
  • 1970-01-01
  • 2010-12-02
  • 2011-03-27
  • 1970-01-01
  • 2018-11-12
  • 2010-09-12
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多