Как изменить размер WPF DataGrid в соответствии с его содержимым?

Цель

Я хотел бы установить такой размер для DataGrid (стандартный, из WPF), чтобы все ячейки (текст ) будет полностью виден. У меня есть окно с DockPanel, с DataGrid в нем, поэтому, когда я изменяю размер окна, все вложенные виджеты (DockPanel и DataGrid) изменяются соответственно.

Пример (edit-1)

Допустим, у вас есть окно, 100 пикселей шириной, и у вас есть DataGrid с одним столбцом, ячейка которого - «быстрая коричневая лиса ...» (400 пикселей в ширину). Таким образом, размер DataGrid следует изменить до 400 пикселей (возможно, больше,

Обходной путь

  1. перебирать заголовки DataGrid (предполагая, что это просто строки) и вычислять ширину, необходимую для текста.
  2. перебирать строки DataGrid для каждого столбца (при условии, что это TextBlock или TextBox) и вычислять максимальную требуемую ширину для текста - добавьте горизонтальные отступы для TextBlock / TextBox и горизонтальные поля для ячейки DataGrid
  3. , суммируйте все различия между DataGrid ActualWidth для столбцов и максимальной шириной, вычисленной в (2)
  4. , увеличьте ширину окна на разницу, вычисленную в (3)

ПРОБЛЕМА

Я провел несколько тестов, и в некоторых случаях вычисленная ширина слишком велика (это небольшая проблема), а в некоторых случаях слишком мала. Проблема начинается с ее основной процедуры - вычисления требуемой ширины для TextBox / TextBlock, вычисленная ширина всегда на 1 единицу меньше, чем должна быть (если я установил ширину равной вычисленной единице, m ищет рекомендуемую реализацию потокобезопасной блокирующей очереди (несколько производителей / потребителей) на C с использованием семантики синхронизации pthread.

22
задан Paul R 2 January 2011 в 10:20
поделиться