Як змусити XAML DataGridCollum заповнити всю DataGrid?


117

Я використовую DataGrids в XAML (не Silverlight) зі змінними стовпцями, DataGrid розшириться, якщо користувач змінить розмір екрана.

В даний час, якщо ширина всіх стовпців DataGrid менша, ніж ширина DataGrid, я отримую додатковий "стовпець", який з'являється, який не можна натискати і не виконує ніякої мети.

Хтось знає, як зробити один стовпець завжди розміром, щоб заповнити весь залишок місця?

Відповіді:


248

Якщо ви використовуєте Width="*"стовпець, заповніть, щоб розширити доступний простір.

Якщо ви хочете, щоб усі стовпці розділили сітку однаково, застосуйте це до всіх стовпців. Якщо ви просто хочете, щоб один заповнив простір, просто застосуйте його до цього стовпця, решта - "Авто" або певної ширини.

Ви також можете використовувати Width="0.25*"(наприклад), якщо ви хочете, щоб стовпець займав 1/4 доступної ширини.


2
і як зробити подібне, якщо я використовую AutoGenerateColumns="True"?
javapowered

1
@javapowered - я б запропонував задати власне запитання, посилаючись на це.
ChrisF

16
@javapowered<DataGrid AutoGenerateColumns="True" ColumnWidth="*" ItemsSource={Binding} />
Xavier

11
@MohamedSakherSawan справді працює для datagrid. Як ColumnWidth="*"на DataGrid, так і Width="*"на індивдуальних стовпцях є бажаний ефект
Стів

1
Повідомляє про помилку. Стинг не може бути перетворений у "*"
co2f2e

18

Переконайтеся, що ваш DataGrid Widthвстановив щось подібне {Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window,AncestorLevel=1}}.

Так, ваше налаштування Width="*"атрибуту на DataGrid.Columns/DataGridXXXXColumnелементах повинно працювати.


9

Як зазначалося, він ColumnWidth="*"добре працював для DataGrid в XAML.

Я використовував це в цьому контексті:

<DataGrid ColumnWidth="*" ItemsSource="{Binding AllFolders, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />


3

Мій 2 Цент ->

Дуже пізно до вечірки

DataGrid -> Стовпець -> Width = "*" працює лише в тому випадку, якщо батьківський контейнер DataGrid має фіксовану ширину.

Приклад: я помістив DataGrid в Grid -> Стовпець, ширина якого = "Авто", то Width = "*" у DataGrid не працює, але якщо ви встановите Grid -> Ширина стовпця = "450", це фіксовано, то він працює добре


2

Ще одна спіна на ту ж тему:

protected void OnWindowSizeChanged(object sender, SizeChangedEventArgs e)
{
    dataGrid.Width = e.NewSize.Width - (e.NewSize.Width * .1);

    foreach (var column in dataGrid.Columns)
    {
       column.Width = dataGrid.Width / dataGrid.Columns.Count;
    }
 }

1

Я додав HorizontalAlignment = "Центр" (за замовчуванням - "Strech"), і це вирішило мою проблему, оскільки вона зробила мережу даних лише настільки широкою, наскільки це було потрібно. (Видалено параметр Ширина даних, якщо він у вас є.)

введіть тут опис зображення


У поєднанні з обраною відповіддю, і ця ця вирішила для мене проблему. Мені потрібно було видалити ширину на самій Datagrid. Дякую.
Брайан Харрінгтон,

0

Це не розширить останній стовпець сітки xaml, щоб зайняти решту місця, якщо AutoGeneratedColumns="True".


Я видалив AutoGenerateColumns, хоча стовпці не розділені або розтягнуті на всю ширину сітки / екрану даних. У мене відповідний рядок сітки має бути "*", а ширина стовпців не має вказаної ширини ("автоматично" або "деяке значення"). Але все ж у мене виникають проблеми, ось код Xaml
GK

0

встановіть ОДИН ширину стовпця на будь-яке значення, тобто width = "*"


0

Для тих, хто шукає вирішення проблеми C #:

Якщо вам потрібно з певних причин увімкнути "AutoGeneratedColumns", одне, що ви можете зробити, - це вказати всю ширину стовпців, за винятком тих, для яких потрібно змінити розмір автоматично (це не займе залишок місця , але змінить розмір до вміст комірки ).

Приклад (dgShopppingCart - це моя DataGrid):

dgShoppingCart.Columns[0].Visibility = Visibility.Hidden; 
dgShoppingCart.Columns[1].Header = "Qty";
dgShoppingCart.Columns[1].Width = 100;
dgShoppingCart.Columns[2].Header = "Product Name"; /*This will be resized to cell content*/
dgShoppingCart.Columns[3].Header = "Price";
dgShoppingCart.Columns[3].Width = 100;
dgShoppingCart.Columns[4].Visibility = Visibility.Hidden; 

Для мене це працює як вирішення, тому що мені потрібно було змінити розмір DataGrid, коли користувач максимізував Вікно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.