Автоматическая прокрутка сетки внутри ScrollViewer приводит к эффекту мерцания / пульсации - PullRequest
0 голосов
/ 19 февраля 2019

Я разрабатываю постоянно прокручиваемую информацию о деталях, сходящих с линии покраски на производственном объекте.Информация регулярно обновляется и отображается сотрудникам на горизонтальном 70-дюймовом ЖК-мониторе (для тестирования я использую стандартный 4-дюймовый ЖК-телевизор Vizio 70).Вот краткий снимок экрана для справки ...

Example of Display

Я использую форму WPF внутри VB.net и создаю серию сеток со встроенными текстовыми полями, чтобы составить всеразличные клетки вы видите на скриншоте.Это делается во время выполнения, так как оно должно быть динамическим.Для того, чтобы все это автоматически «прокручивалось», основная сетка встроена в элемент управления scrollviewer, и я использую таймер для увеличения свойства VerticalOffset значения scrollviewer каждые X миллисекунд для прокрутки всей информации.пока он не достигнет конца.

Я должен упомянуть, что вся сетка обычно состоит из менее чем 100 строк информации.

Все работает отлично с этим решением, за исключением того, что когда сетка автоматически прокручиваетсясквозь строки, которые я заканчиваю, будет этот пульсирующий / мерцающий эффект, он особенно заметен при запуске программы на большом дисплее.Я читал о двойной буферизации, но это уже форма WPF, поэтому я не уверен, что она применима здесь или может быть применена к элементу управления scrollviewer или grid.Вот короткое видео, которое показывает то, о чем я говорю (обратите внимание: оно останавливает прокрутку после каждой пары строк, является преднамеренным) ...

Пример видео на Youtube

Есть идеи о том, что я могу сделать, чтобы минимизировать этот эффект при прокрутке?

Прямо сейчас я настраиваю таймер для запуска каждые 30 миллисекунд ...

Dim scrollTimer As DispatcherTimer = New DispatcherTimer()    
AddHandler scrollTimer.Tick, AddressOf scrollTimer_Tick    
scrollTimer.Interval = New TimeSpan(0, 0, 0, 0, 30)     
scrollTimer.Start()

И затемпрокрутка вертикального смещения на 1 ...

scrlPaintLineStatus.ScrollToVerticalOffset(scrlPaintLineStatus.VerticalOffset + 1)

Заранее спасибо.

...