как сделать так, чтобы xaml datagridcolumns заполнял всю datagrid?

<p>я использую datagrids в xaml (не silverlight) с изменяемыми размерами столбцов, datagrid будет расширяться, если пользователь изменяет размер экрана.</p><p>в настоящее время, если ширина всех столбцов datagrid меньше ширины datagrid, появляется дополнительный "столбец", который не может быть кликабелен и не имеет смысла.</p><p>кто-нибудь знает, как заставить один столбец всегда изменять размер, чтобы заполнить все оставшееся пространство?</p>

<p>если вы используете <code>width="*"</code>, колонка заполнится, чтобы расширить доступное пространство.</p><p>если вы хотите, чтобы все столбцы делили сетку в равной степени, примените это ко всем столбцам. если вы хотите, чтобы один из них заполнил оставшееся пространство, просто примените его к этому столбцу, оставив "авто" или определенную ширину.</p><p>вы также можете использовать <code>width="0.25*"</code> (например), если хотите, чтобы столбец занимал 1/4 доступной ширины.</p>

<p>убедитесь, что в вашей datagrid <code>width</code> установлено что-то вроде <code>{binding path=actualwidth, relativesource={relativesource mode=findancestor,ancestortype=window,ancestorlevel=1}}</code>.</p><p>таким образом, ваша настройка атрибута <code>width="*"</code> для элементов <code>datagrid.columns/datagridxxxxcolumn</code> должна работать.</p>

<p>как уже отмечалось, <code>columnwidth="*"</code> прекрасно работал для datagrid в xaml.</p><p>я использовал это в этом контексте:</p><pre><code><datagrid columnwidth="*" itemssource="{binding allfolders, mode=twoway, updatesourcetrigger=propertychanged}" /> </code></pre>

<p>установите для свойства <code>width</code> столбцов пропорциональную ширину, например <code>*</code></p>

<p>я добавил horizontalalignment = "center" (по умолчанию "strech"), и это решило мою проблему, потому что это сделало сетку данных настолько широкой, насколько это необходимо. (удалена настройка ширины сетки данных, если она у вас есть.)</p><p><img src="https://i.stack.imgur.com/tzg7y.png" alt="enter image description here"></p>

<p>еще одно вращение на ту же тему:</p><pre><code>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; } } </code></pre>

<p>установите ширину одного столбца в любое значение, то есть width = "*"</p>

<p>для тех, кто ищет обходной путь в c #:</p><p>если по какой-то причине вам нужно включить "autogeneratedcolumns", вы можете указать одну ширину всех столбцов, кроме тех, для которых вы хотите автоматически изменять размер (это будет <strong>не занимать оставшееся пространство</strong> , но это будет <strong>изменить размер содержимого ячейки</strong>).</p><p>пример (dgshopppingcart - это моя datagrid):</p><pre><code>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; </code></pre><p>для меня это работает как обходной путь, потому что мне нужно было изменить размер datagrid, когда пользователь развернул окно.</p>

<p>это не расширит последний столбец сетки xaml, чтобы занять оставшееся пространство, если <code>autogeneratedcolumns="true"</code>.</p>