Silverlight - как визуализировать изображение из невидимых данных, связанных с пользовательским элементом управления? - PullRequest
1 голос
/ 29 апреля 2010

У меня такая ситуация - я бы хотел установить контроль за временной шкалой. Так что у меня есть UserControl и ItemsControl на нем (каждая строка представляет некоторого человека). ItemsControl содержит еще один ItemsControl как ItemsControl.ItemTemplate - он показывает, например, мероприятия для человека, упорядоченные по дате события.

Так что это выглядит как некая сетка с датами в виде заголовков столбцов и, например, народы как заголовки строк. ........................ |. 2010.01.01 ..... 2010.01.02 . .... 2010.01.03
Адам Смит .... | ...... [какое-то событие # 1] ..... [какое-то событие # 2] ......

Джон Доу ....... | ... [какое-то событие # 3] ..... [какое-то событие # 4] .........

У меня может быть много людей (ItemsControl # 1 - 100-200 предметов) и много событий, произошедших за один день (1-10-30 событий на человека за один день)

проблема в том, что когда пользователь прокручивает ItemsControl # 1 / # 2, это происходит слишком долго, так как много элементов должно отображаться за один раз (как, например, немного текстовых полей и других элементов в описании конкретного события). )

Вопрос № 1 - как я могу его улучшить? Может быть кто-нибудь знает лучший способ построить такой пользовательский элемент управления? Я должен упомянуть, что я использую пользовательскую виртуальную панель, основанную на некоторой пользовательской реализации виртуальной панели, найденной где-то в Интернете ...

Вопрос № 2 - Я хотел бы создать изображение с помощью WriteableBitmap и отобразить привязку данных к изображению и показать изображение вместо множества элементов. Проблема в том, что я пытаюсь отобразить невидимый элемент управления с привязкой к данным (созданный в коде позади), и его фактическая ширина / высота равна нулю (поэтому ничего не отображается), даже если я использую Dispatcher.BeginInvoke (() => {.. .} подход. Как я могу решить это?

Большое спасибо за помощь!

1 Ответ

2 голосов
/ 29 апреля 2010

О вопросе № 1: Вложенная виртуализация ItemsControl является сложной задачей. Проблема в том, что даже если внешний элемент управления поддерживает виртуализацию, внутренние элементы управления измеряются с бесконечной длиной и, таким образом, создаются все их дочерние экземпляры. Вместо размещения ItemsControl внутри другого, объедините все данные в один и тот же список, используя стилизацию для имитации иерархии. Либо найдите коммерческий элемент управления сеткой данных, который поддерживает вложенную виртуализацию.

...