我已经构建了一个与outlook类似的调度应用程序,但是它可以显示多个人的日程安排。我编写了一个用户控件,基本上是一个具有渐变填充背景的边框& TextBlock。这些控件中的一个将添加到画布上,为每次约会设置位置。问题是,我会有多个用户,有多个约会,可能需要一次显示1000个左右的约会。最初,实例化所有这些对象需要一个绝对的年龄,但是,我可以接受这一点。
不幸的是,当我试图浏览约会时,出现了一个大问题。我有几个按钮可以左右滚动,单击这些按钮后,UserControls的左侧位置将被移动到一定数量的像素--在单击按钮和重新绘制之间可能需要几秒钟的时间(我还尝试使用标签测试,但结果是一样的)。
我想这里真正的问题是如何实现一个接口,展示数百个具有足够性能的控件,如果这是无法实现的,我将如何处理这样的UI。
发布于 2015-05-11 19:08:00
一个可能的选择是TextBlock CustomControl。您可以获得与您在用户控件中完全相同的样式,但是加载时间要快一些。
发布于 2015-05-11 21:51:00
如果没有可靠地再现问题的 code example,即使不是不可能,也很难完全理解您所面临的性能问题,更不用说提供解决方案了。
尽管如此,从您的描述来看,您确实希望向用户提供某种类型的ItemsControl,例如ListBox或ListView (ListBox的专门化)。在ItemsControl中,您可以指定一个ItemTemplate,它定义列表中每一项的显示方式;这类似于您现在使用的UserControl。
我相信它很可能会很好,仅仅通过改变。也就是说,将每个项目的可视化定义为DataTemplate而不是UserControl,并将ItemTemplate属性(例如,您的ListBox )设置为该模板,然后将约会对象的集合绑定到ListBox.ItemsSource属性。
注意,ListBox类已经默认在其ItemsPanel模板中使用VirtualizingStackPanel。因此,如果使用ListBox,则这种方法在性能上完全没有问题。
如果您想使用不同的ItemsControl或创建自定义的,您可能会发现或者不需要显式地使用虚拟面板对象(例如ListBox使用的VirtualizingStackPanel )。在列表中只有1000个项时,即使是非虚拟化面板也可以,但如果不使用ListBox,则始终可以显式地指定它。
https://stackoverflow.com/questions/30173960
复制相似问题