WPF горизонтальный DataGrid

Я хотел бы иметь WPF DataGrid с горизонтальной ориентацией, кто-нибудь знает решение?

Я сделал это раньше, так как мы хотели иметь возможность использовать один и тот же элемент управления для DataGrid и PropertyGrid . Многие вещи должны быть изменены (например, выравнивание, прокрутка, позиционирование сортировочных стрелок и т. Д.). Существует много кодов для публикации всего решения, но это должно вас начать. Это пример с Autogenerated TextColumns, но вы можете легко изменить его, чтобы использовать другие типы столбцов.

alt text

             

И когда генерируются столбцы, мы меняем свои позиции и поворачиваем TextBlocks и TextBoxes (это лучше, чем rotation DataGridCell с точки зрения выравнивания, размытия и т. Д.),

 private void c_dataGridScrollViewer_Loaded(object sender, RoutedEventArgs e) { // Add MouseWheel support for the datagrid scrollviewer. c_dataGrid.AddHandler(MouseWheelEvent, new RoutedEventHandler(DataGridMouseWheelHorizontal), true); } private void DataGridMouseWheelHorizontal(object sender, RoutedEventArgs e) { MouseWheelEventArgs eargs = (MouseWheelEventArgs)e; double x = (double)eargs.Delta; double y = c_dataGridScrollViewer.VerticalOffset; c_dataGridScrollViewer.ScrollToVerticalOffset(y - x); } private void c_dataGrid_AutoGeneratedColumns(object sender, EventArgs e) { TransformGroup transformGroup = new TransformGroup(); transformGroup.Children.Add(new RotateTransform(90)); foreach (DataGridColumn dataGridColumn in c_dataGrid.Columns) { if (dataGridColumn is DataGridTextColumn) { DataGridTextColumn dataGridTextColumn = dataGridColumn as DataGridTextColumn; Style style = new Style(dataGridTextColumn.ElementStyle.TargetType, dataGridTextColumn.ElementStyle.BasedOn); style.Setters.Add(new Setter(TextBlock.MarginProperty, new Thickness(0, 2, 0, 2))); style.Setters.Add(new Setter(TextBlock.LayoutTransformProperty, transformGroup)); style.Setters.Add(new Setter(TextBlock.HorizontalAlignmentProperty, HorizontalAlignment.Center)); Style editingStyle = new Style(dataGridTextColumn.EditingElementStyle.TargetType, dataGridTextColumn.EditingElementStyle.BasedOn); editingStyle.Setters.Add(new Setter(TextBox.MarginProperty, new Thickness(0, 2, 0, 2))); editingStyle.Setters.Add(new Setter(TextBox.LayoutTransformProperty, transformGroup)); editingStyle.Setters.Add(new Setter(TextBox.HorizontalAlignmentProperty, HorizontalAlignment.Center)); dataGridTextColumn.ElementStyle = style; dataGridTextColumn.EditingElementStyle = editingStyle; } } List dataGridColumns = new List(); foreach (DataGridColumn dataGridColumn in c_dataGrid.Columns) { dataGridColumns.Add(dataGridColumn); } c_dataGrid.Columns.Clear(); dataGridColumns.Reverse(); foreach (DataGridColumn dataGridColumn in dataGridColumns) { c_dataGrid.Columns.Add(dataGridColumn); } } 

Я действительно стоял на плечах гигантов здесь :-), но у меня есть дополнительное усовершенствование.

@dimaKudr предложил способ преобразования предопределенных столбцов без кода, а @FrankE уточнил порядок столбцов. То, что я добавляю, – это способ преобразования автоматически генерируемых столбцов ( AutoGenerateColumns="True" ) с использованием шаблона DataGrid.CellStyle . Таким образом, полное (и довольно элегантное) решение:

               

Я немного упростил предыдущее решение. Мне не нравится черная магия с дополнительным scrollviewer, поэтому я не использую ее. Но вместо этого я использую дополнительное масштабирование.

          

В случае предопределенного списка колонок можно напрямую передать содержимое ячеек в XAML:

  

Это позволяет полностью избежать кода.

Я нашел этот подход очень полезным, однако я сделал поворот и зеркалирование:

 TransformGroup transformGroup = new TransformGroup(); transformGroup.Children.Add(new RotateTransform(90)); transformGroup.Children.Add(new MatrixTransform(-1, 0, 0, 1, 0, 0)); 

или в Xaml:

        

Используя зеркалирование, у меня есть поле в конце списка столбцов внизу, а не сверху.

  • jQuery Мобильная блокировка блокировки
  • Формирование портретной ориентации при нажатии на альбомный режим.
  • iOS 6 UITabBarController поддерживает ориентацию с текущим controllerом UINavigation
  • ориентация экрана для Android
  • Как заблокировать ориентацию во время выполнения
  • Android WebView: обработка изменений ориентации
  • Как заблокировать ориентацию в портретном режиме в веб-приложении iPhone?
  • Как я могу получить текущую ориентацию экрана?
  • Android - отключить ландшафтный режим?
  • Сохранение данных и изменение ориентации
  • Часто задаваемые вопросы и решения для iPhone
  • Давайте будем гением компьютера.