Многие функции GridView жестко запрограммированы в классе. В частности, GridViewRowPresenter создает жестко закодированный контейнер TextBlock или ContentPresenter для каждой из ячеек и устанавливает поля равными 6,0,6,0, нравится вам это или нет.
Обычно я бы отговаривал вас от всего, что связано с жестким кодированием отрицательного поля для компенсации, поскольку это взлом наложен на другой взлом. Однако после разборки GridViewRowPresenter других вариантов больше нет.
Моей первой попыткой было переопределить неявный стиль для элемента управления контейнера, который был создан в классе GridViewRowPresenter, но этот элемент управления является TextBox или ContentPresenter, у которого нет шаблона для переопределения.
Моей второй попыткой было разобрать код и построить новый GridViewRowPresenter. Боюсь, что в классе слишком много внутренних "внутренних" вызовов, чтобы сделать это работоспособным решением.
Более умный архитектор предоставил бы DependencyProperty, который позволял бы пользователю класса переопределять контейнер, созданный для каждой ячейки. По какой-то причине они разрешили это с заголовками, но не с фактическим содержимым ячейки.
Таким образом, мы остаемся с тем фактом, что ячейки в GridRowPresenter не могут быть ни переопределены, ни спроектированы, ни шаблонизированы. Извините, но с этим классом лучше всего использовать отрицательные поля.
Нам нужен лучший ListView: GridView не подходит для интерфейса без внешнего вида, хотя я ценю то, что пытались сделать их первоначальные архитекторы, отделив ItemsPresenter от презентации.