Скрыть вертикальную полосу прокрутки / синхронизировать верхний элемент с Scrollable = false

Я пытаюсь синхронизировать 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, или есть лучший способ подойти к этому?

Большое спасибо


person ChrisD88    schedule 30.08.2011    source источник
comment
Довольно много причин, чтобы сделать «заголовок» не ListView.   -  person Hans Passant    schedule 30.08.2011
comment
Я действительно обдумывал это, но подумал, что в конечном итоге это будет сложнее, особенно с форматированием, поскольку оно должно выглядеть как один бесполезный элемент управления, поэтому заголовки столбцов могут быть сложными? Какой еще контроль вы могли бы предложить? Спасибо   -  person ChrisD88    schedule 30.08.2011
comment
Не могли бы вы временно установить для scrollable значение true, делать свои дела, а затем вернуть значение false, если это вызывает вашу проблему?   -  person andyhasit    schedule 30.08.2011
comment
К сожалению, не Энди, при повторном отключении Scrollable кажется, что элемент управления возвращается в исходное состояние.   -  person ChrisD88    schedule 30.08.2011
comment
Посмотрите эту ссылку: stackoverflow.com/questions/2488622/. Это какая-нибудь помощь?   -  person andyhasit    schedule 30.08.2011
comment
Я уверен, что это не тот ответ, который вы хотите услышать, но это не ограничение .NET, это жесткое ограничение элемента управления Win32 ListView. Функция EnsureVisible в .NET просто отправляет базовому элементу управления ListView сообщение LVM_ENSUREVISIBLE, а как в документации к этому сообщению указано, что это сообщение не действует, если прокрутка отключена, поскольку элемент управления ListView имеет стиль LVS_NOSCROLL (что является результатом установки для свойства Scrollable значения false).   -  person Cody Gray    schedule 10.01.2016