Я настроил DataGrid
очень много, но на удивление я не могу добавить рамку вокруг всей области заголовка без ее разрушения.
Так вот что я пытаюсь сделать:
Следующий элемент управления отвечает за отображение области заголовка: DataGridColumnHeadersPresenter
.
Я добавил рамку вокруг нее, икак вы можете видеть на скриншоте выше, он работает, но проблемы начинаются только тогда, когда сетка пуста! (это означает, что также необходимо удалить пустую строку, что можно сделать, установив CanUserAddRows="False"
).
Итак, вот мой стиль:
<Border BorderBrush="Red" BorderThickness="1" Grid.Column="1">
<DataGridColumnHeadersPresenter x:Name="PART_ColumnHeadersPresenter" Margin="0,0,0,5"
Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Column}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}">
</DataGridColumnHeadersPresenter>
</Border>
Все, что я сделал, это обернул его рамкой, но теперь, когда я применяю фильтрацию, так что сетка пуста,заголовок исчезает вправо, и приложение замедляется до сканирования.
Демонстрация:
Если я уберу границу, все будет работать как положено.Кажется, что DataGrid ожидает очень специфическую древовидную структуру, в противном случае он просто взрывается.
Я пытался изменить шаблон DataGridColumnHeadersPresenter
, но также ожидал очень специфическую структуру, которая выглядит следующим образом:
<DataGridColumnHeadersPresenter.Template>
<ControlTemplate TargetType="{x:Type DataGridColumnHeadersPresenter}">
<Grid>
<DataGridColumnHeader x:Name="PART_FillerColumnHeader"
IsHitTestVisible="False" />
<ItemsPresenter />
</Grid>
</ControlTemplate>
</DataGridColumnHeadersPresenter.Template>
Если я даю DataGridColumnHeader
a BorderBrush
и BorderThickness
, это выглядит неправильно, и если я добавляю свой собственный пограничный контроль где-либо, возникает та же проблема.
На самом деле DataGridColumnHeadersPresenter
имеет свойства BorderBrush
и BorderThickness
, но они никак не влияют.
Один из найденных мной обходных путей - установить Grid.Column
на 0
, поэтомучто он идет вместо заголовка столбца заголовков строк, затем просто установите HeadersVisibility="Column"
на DataGrid
, чтобы он не выглядел неработающим, и проблема исчезла.К сожалению, мне нужны заголовки строк, так что это неприемлемое решение.
Стиль по умолчанию для DataGrid можно найти здесь , или просто щелкните его правой кнопкой мыши в Visual Studio и перейдите в Редактировать шаблон,затем отредактируйте копию, что я и сделал.
Должен быть простой способ сделать это, которого я, вероятно, просто сейчас не вижу ...