Я пытаюсь синхронизировать 2 представления списков, так что одно из них фактически является «панелью замораживания» одного столбца (подумайте о замораживании заголовков в Excel).
Однако мне трудно синхронизировать верхние элементы при прокрутке. Мне нужно скрыть вертикальные и горизонтальные полосы прокрутки в представлении списка заголовков, чего можно добиться, установив для Scrollable значение false. Хотя это, кажется, отключает функции EnsureVisible и TopItem?
Я перехватил сообщения полосы прокрутки в главном представлении списка, поэтому я знаю, когда оно прокручивается, просто по какой-то причине я не могу обновить верхний элемент в представлении списка заголовков, чтобы он соответствовал.
Код, который у меня есть для обновления списка заголовков, выглядит следующим образом:
//On vertical scroll click...
if (e.Type == ScrollEventType.EndScroll)
{
int index = lvwHeader.FindItemWithText(lvwSource.TopItem.Text).Index;
ListViewItem item = lvwHeader.Items[index];
lvwHeader.TopItem = item;
System.Diagnostics.Debug.WriteLine(lvwHeader.TopItem.Text + " - " + lvwSource.TopItem.Text);
}
Поэтому мне было интересно, есть ли другой способ заставить список заголовков установить элемент в качестве топ-элемента, пока Scrollable = false, или есть лучший способ подойти к этому?
Большое спасибо
EnsureVisible
в .NET просто отправляет базовому элементу управления ListView сообщениеLVM_ENSUREVISIBLE
, а как в документации к этому сообщению указано, что это сообщение не действует, если прокрутка отключена, поскольку элемент управления ListView имеет стильLVS_NOSCROLL
(что является результатом установки для свойства Scrollable значения false). - person Cody Gray   schedule 10.01.2016