WPF - Столбец DataGrid с шириной = "*", но минимальной шириной, чтобы соответствовать содержимому - PullRequest
30 голосов
/ 04 августа 2010

Каков наилучший / правильный способ, чтобы набор DataGrid столбцов имел пропорциональную ширину (Width="\*"),, но чтобы их минимальная ширина была как минимум шириной их содержимого? Если я использую Width="*", то столбцы остаются точно пропорциональными, но содержимое становится обрезанным, если столбцы становятся слишком тонкими. Если я использую Width="Auto", то столбцы сами по размеру соответствуют своему содержанию, но это делает их разными. размеры.

То, что я хочу, на самом деле является комбинацией этих двух, например Width="\*", MinWidth="Auto", так что при наличии дополнительной ширины столбцы будут разнесены на равные ширины, но когда сетка станет меньше, содержимое никогда не будет обрезано.

К сожалению, MinWidth="Auto" не существует, поэтому я предполагаю, что мне нужно связать свойство MinWidth столбца, но трудно точно определить, с чем бы я его связал.

Как мне сказать WPF "MinWidth=" ширину самой широкой части содержимого столбца?

Ответы [ 4 ]

19 голосов
/ 03 июля 2012

Я знаю, что уже немного поздно, но я нашел ваш вопрос и запрограммировал решение на чистом XAML.

 <ColumnDefinition Width="42*" MinWidth="{Binding Path=ActualWidth, ElementName=projectInfoHeader }"/> 

Где ElementName указывает на элемент управления, занимающий большую часть пространства. Конечно, это возможно только с элементами, которые имеют ограниченную ширину. Если вы сделаете это, например, для GroupBox, то вы можете изменить размер только на большую ширину и никогда не изменять размер на меньшую.

Если у вас есть несколько кандидатов на значение MinWidth, вам нужно написать себе IMultiValueConverter, который берет объект [], анализирует его как float и возвращает максимум (это всего лишь 1 запрос linq, если используйте его только для себя и вам не нужно справляться с неправильным использованием конвертера)

Этот способ также поддерживает динамическое изменение MinWidth.

12 голосов
/ 25 октября 2010

Набор Width = "Auto" в XAML.

Тогда в коде:

MinWidth = ActualWidth
Width = new GridLength(1, GridUnitType.Star)
2 голосов
/ 26 февраля 2014

У меня также были проблемы с правильным размером столбцов Grid внутри GridViewColumn. Я попробовал несколько вещей, но потом нашел UniformGrid. Это было окончательное решение для меня. Это просто работает. Я не знал этого раньше ... кажется, что он не существует в VS toolbox по умолчанию (?) И поэтому не знал, что он даже существует.

Подробнее о UniformGrid можно узнать из здесь .

1 голос
/ 20 сентября 2012

Дайте столбцу имя в XAML:

<Grid>
      <Grid.ColumnDefinitions>
             <ColumnDefinition Width="*" Name="Col1"/>
             <ColumnDefinition Width="*"/>
      </Grid.ColumnDefinitions>
</Grid>

Затем установите свойство MinWidth в коде, как показано ниже:

public MainWindow()
{
    InitializeComponent();

    Col1.MinWidth = 340; //enter desired minimum width here
}
...