Я использую WPF DataGrid, и я хотел бы разрешить пользователю выбирать весь столбец, щелкнув заголовок столбца. В настоящее время у меня есть SelectionUnit, установленный в CellOrRowHeader, потому что я хочу иметь ту же функциональность для строк (что отлично работает). Есть ли простой способ также разрешить выбор столбцов, щелкнув заголовок столбца?DataGrid Select Entire Column
ответ
У вас есть много вариантов. один создает собственный шаблон для стиля заголовка DataGrid. Внутри тега DataTemplate вы можете изменить шаблон заголовков. (. Вы можете заменить кнопки с TextBlock или все, что вы хотите)
<DataGrid>
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader" >
<Setter Property="Foreground" Value="Blue" />
<Setter Property="ContentTemplate" >
<Setter.Value>
<DataTemplate>
<Button Content={Binding Content}" MouseDown="mouseDownEventHandler">
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.ColumnHeaderStyle>
</DataGrid>
или если вы используете DataGrid.Columns для заполнения ваших колонок и вы должны установить каждую из них в отдельности, вы можете использовать это:
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn HeaderTemplate="{StaticResource MyTemplate1"/>
<DataGridHyperlinkColumn HeaderTemplate="{StaticResource MyTemplate2"/>
</DataGrid.Columns>
</DatGrid>
где MyTemplate1 и 2 должны быть определены ранее в ресурсах вашего элемента управления.
Edit:
Другой подход, согласно this link является добавление PreviewMouseDown к вашему DataGrid, а затем выяснить, если вниз мышь случилось на заголовок или нет.
Это простая версия ее обработчик событий:
DependencyObject dep = (DependencyObject)e.OriginalSource;
while ((dep != null) && !(dep is DataGridColumnHeader))
{
dep = VisualTreeHelper.GetParent(dep);
}
if (dep == null) return;
if (dep is DataGridColumnHeader)
{
MessageBox.Show(((DataGridColumnHeader)dep).Content.ToString());
}
Любая идея, как бы я выделил ее в синем на мыши, вроде заголовков строк? – KrisTrip
Я искал его и нашел пару решений для получения события клика из заголовка столбца. один из них использует событие ColumnReordering, как описано здесь: http://stackoverflow.com/questions/3716819/wpf-listview-columnheader-click-event – Bijan
Я изменил свой ответ выше. Взгляните на вторую часть (после «Изменить»). Я думаю, что это решит вашу проблему. – Bijan
Вы можете также изменить ColumnHeaderStyle
:
В XAML:
<DataGrid>
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader">
<EventSetter Event="Click" Handler="DataGridColumnHeader_OnClick"></EventSetter>
</Style>
</DataGrid.ColumnHeaderStyle>
</DataGrid>
В отделенном коде:
private void DataGridColumnHeader_OnClick(object sender, RoutedEventArgs e)
{
var columnHeader = sender as DataGridColumnHeader;
if (columnHeader != null)
{
if (!Keyboard.IsKeyDown(Key.LeftCtrl))
{
dataGrid.SelectedCells.Clear();
}
foreach (var item in dataGrid.Items)
{
dataGrid.SelectedCells.Add(new DataGridCellInfo(item, columnHeader.Column));
}
}
}
- 1. DataGrid Select Column
- 2. SQL Select Entire Row by Distinct Columns
- 3. Binding datagrid column width
- 4. wpf datagrid combobox column
- 5. Silverlight datagrid template column
- 6. wpf datagrid checkbox column
- 7. WPF DataGrid Column Resizing
- 8. Flex Datagrid Column Total
- 9. XAML DataGrid Column Borders
- 10. WPF datagrid custom column
- 11. Silverlight 4 DataGrid Column
- 12. Datagrid Column Collection Changed Event
- 13. SELECT column mysql
- 14. SELECT COLUMN SQL
- 15. Column Select Xcode
- 16. DBFlow Select Column
- 17. Powershell select ignoring column
- 18. MySQL Dynamic SELECT COLUMN
- 19. SQL SELECT Дубликат Column
- 20. выберите * vs select column
- 21. DataSet Select Column
- 22. SQL select column эквивалентность
- 23. Multi-select DataGrid
- 24. WPF RowValidation column размещения DataGrid
- 25. WPF DataGrid Column TextWrapping Programmatically
- 26. WPF DataGrid Autogenerate Column Order
- 27. Datagrid view button column image
- 28. datagrid column formatter не работает
- 29. WPF Datagrid Column Width Issue
- 30. OnEvent datagrid column add fail
Я возвращаюсь tly имел такую же ситуацию и после нескольких часов поиска и абсолютно ничего не нашел, наконец, реализовал его с событием мыши и петлей! – Bijan
Я думал, возможно, это можно сделать, переопределив стиль заголовка столбца, чтобы сделать его кнопкой, а затем добавив на эту кнопку событие щелчка. Я бы хотел, чтобы он выглядел так же, как стиль заголовка строки, но я новичок в стилизации. Может быть, если бы я мог понять, как выглядит стиль заголовка строки, я могу скопировать его и внести корректировки для заголовка столбца ... – KrisTrip
переопределив, если вы имеете в виду классическое переопределение, то это не лучшее решение, когда у вас есть большой потенциал стилизации и шаблонов в WPF. Но ваша идея правильная и может работать, если вы переопределите стили Aero по умолчанию: http://stackoverflow.com/questions/643440/override-default-styling-in-wpf-textbox-based-on-presentationframework-aero однако если вы измените шаблон элемента управления, стили по умолчанию могут больше не работать. – Bijan