Как убрать пустую область слева и справа от заголовка ListView
1,00
р.
р.
При разработке обычных десктопных приложений (на WPF), никогда не обращал внимание на специфическую отрисовку заголовка ListView. Области выделены красным.
Но тут возникла необходимость делать дополнительное окно, на которое выводятся ListView с 2-мя колонками. С этого окна, захватывается изображение попиксельно, специальным устройством и отправляются на светодиодные табло, и все мелкие детали там хорошо видны.
Ответ Как верно заметили в комментариях, отступы в заголовке составляют 3 пикселя, но добавлять отрицательный отступ к GridViewColumnHeader неправильно, т. к. этот отступ будет у каждого столбца (т.е. столбцы будут перекрывать друг друга), а нам нужно устранить только отступ слева и справа у всей строки заголовка. Покопавшись, с помощью встроенных в Visual Studio инструментов Live Visual Tree и Live Property Explorer, в визуальном дереве окна, я выяснил, что из этих трех пикселей два дает GridViewHeaderRowPresenter.Margin и один — ListBoxChrome.BorderThickness. С ListBoxChrome.BorderThickness всё просто — он привязан к BorderThickness родителя, т. е. самого ListView и устраняется просто в разметке или стиле:
Также в Live Visual Tree видно, что GridViewHeaderRowPresenter лежит внутри ScrollViewer, открыв стандартный стиль ListView, можно найти только один ScrollViewer, у которого стиль задается вот так:
Этот стиль можно найти в документации Microsoft здесь. В этом стиле внутри шаблона можно увидеть такой фрагмент: Это и есть те два пикселя слева и справа. Наиболее простым решением видится скопировать этот стиль из документации целиком и добавить в ресурсы своего окна (или куда вам удобнее), а затем просто в нем убрать этот Margin. В итоге ресурс с ключом GridView.GridViewScrollViewerStyleKey будет перекрыт и будет использоваться локальный. В итоге у меня получилось вот что: