Я реализую GridView, который сортирует, нажимая на заголовки столбцов. Я нашел одно из стандартных решений, но оно у меня не сработало.
У меня есть заголовок "P", в то время как содержимое ячеек и заголовок должны быть центрированы (выравнивание). Заголовок имеет метку «P», отличную от привязки «Фото».
<GridViewColumn Width="30" Header="P">
<GridViewColumn.HeaderContainerStyle>
<Style TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>
</GridViewColumn.HeaderContainerStyle>
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Photo}" HorizontalAlignment="Center"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
Код, управляющий щелчком столбца, приведен ниже (с сайта Mircosoft).
Предполагается, что существует DisplayMemberBinding
var columnBinding = headerClicked.Column.DisplayMemberBinding as Binding;
, которого у меня нет, в противном случае заголовок столбца и его содержимое не центрируются.
В противном случае он принимает метку столбца в качестве свойства для сортировки.
var sortBy = columnBinding?.Path.Path ?? headerClicked.Column.Header as string;
Это также не работает, поскольку моя метка - "P", а свойство - "Фото".
Есть еще идеи?
internal void HandleOverviewColumnHeaderClicked(GridViewColumnHeader headerClicked)
{
ListSortDirection direction;
if (headerClicked != null)
{
if (headerClicked.Role != GridViewColumnHeaderRole.Padding)
{
if (headerClicked != _lastHeaderClicked)
{
direction = ListSortDirection.Ascending;
}
else
{
if (_lastDirection == ListSortDirection.Ascending)
{
direction = ListSortDirection.Descending;
}
else
{
direction = ListSortDirection.Ascending;
}
}
var columnBinding = headerClicked.Column.DisplayMemberBinding as Binding;
var sortBy = columnBinding?.Path.Path ?? headerClicked.Column.Header as string;
Sort(sortBy, direction);
if (direction == ListSortDirection.Ascending)
{
headerClicked.Column.HeaderTemplate = _window.Resources["HeaderTemplateArrowUp"] as DataTemplate;
}
else
{
headerClicked.Column.HeaderTemplate = _window.Resources["HeaderTemplateArrowDown"] as DataTemplate;
}
// Remove arrow from previously sorted header
if (_lastHeaderClicked != null && _lastHeaderClicked != headerClicked)
{
_lastHeaderClicked.Column.HeaderTemplate = null;
}
_lastHeaderClicked = headerClicked;
_lastDirection = direction;
}
}
}