0

我是 Windows Phone 编程的新手。在我的应用程序中,我有一个列出电话联系人的列表框。目前,它被列为 UI 中列表项大小相同的常规列表。我希望像这样修改前端:界面截图

我不想为每个列表项设置不同的大小/背景颜色,而是使用固定的 UI,让列表滚动浏览它,并且视图中的列表项在任何时候都应该如图所示显示。

我不希望任何代码作为答案,但也欢迎任何示例,只是想知道使用这种功能的哪些功能是可能的,以便我可以阅读!

谢谢,迪帕克

4

2 回答 2

1

将现有控件(例如 ListBox)修改成这样会很困难,因此最好的选择可能是 ItemsControl,其 RenderTransform 设置为 TranslateTransform。

如果在 ItemsControl 上放置一个 Rectangle(使用 Fill="Transparent"),则可以将处理程序附加到 ManipulationStarted、ManipulationDelta 和 ManipulationCompleted 事件,以通过设置 TranslateTransform 的 Y 偏移量来控制“滚动”。

要调整列表中项目的大小,有两个选项:自定义面板或手动设置。

自定义面板

您可以创建一个自定义 Panel 实现,该实现将根据您将创建以表示滚动位置的属性适当地调整其 Children 的大小。将 ItemsControl 设置为使用您的面板,并通过将处理程序绑定或附加到面板的 Loaded 事件并保持指向面板的指针,从 ManipulationDelta 处理程序内部更新上述属性。

手动设置

在 ManipulationDelta 处理程序内部,您还可以计算框的各种高度并使用 MyItemsControl.ItemContainerGenerator.ContainerFromIndex 来获取每个项目的视觉效果并设置其高度。

我建议将这一切都放在自定义 UserControl 中。

您可能会遇到使用 TranslateTransform 进行剪辑的问题,但希望这可以帮助您入门。不幸的是,这看起来是一个相当困难的控件,很难作为您的第一个 windows phone 项目来尝试!

于 2013-05-02T06:30:22.493 回答
0

所以最后我确实设法找到了一种方法来做到这一点。第一种方法是 @Murkaeus 建议的,使用 UserControl 和 ManipulationDelta 事件处理程序。但是由于某种原因,仅针对 2 个手指手势(缩放、捏合等)触发了操作 Delta 事件,我不知道为什么。经过一番尝试,我不得不放弃这个。

下一种方法是使用 Listbox 本身。列表框的来源设置为我在从电话中读取联系信息后创建的列表(模型对象)。列表框项的高度和颜色绑定到我的模型中名为“scaleLevel”的属性,并通过实现 IValueConvertors 进行相应转换,以提供不同比例级别的预定义颜色和高度值。

我为滚动查看器垂直偏移创建了一个附加属性,如[此处](http://www.scottlogic.co.uk/blog/colin/2010/07/exposing-and-binding-to-a-silverlight-scrollviewer% E2%80%99s-滚动条/)!此事件在垂直偏移量变化时触发,每次滚动时,我都会根据当前垂直偏移量找出要放大的列表框项和缩小的列表框项。

获得此信息后,我将更改(模型的)列表中受影响项目的属性(“scaleLevel”)(绑定到列表框高度和颜色)。使用 INotifyPropertyChanged 事件在 UI 中更新此更改。

我不知道这是否是最好的方法,但它运作良好,尽管涉及到处理,但更新 UI 并没有什么可观的。

我想听听您对实施的意见以及您认为会更好的任何其他解决方案。

于 2013-05-04T10:18:53.767 回答