WPF - столбец DataGrid с шириной = "*", но MinWidth to Fit Contents
Какой лучший/правильный способ иметь набор столбцов DataGrid
имеет пропорциональную ширину (Width="\*"),
, но для того, чтобы ширина минимальная была как минимум шириной их содержимого? момент, если я использую Width="*"
, то столбцы остаются точно пропорциональными, но контент обрезается, если столбцы становятся слишком тонкими. Если я использую Width="Auto"
, то столбцы сами по себе сами по себе отлично подходят к их контенту, но это делает их все разных размеров.
То, что я хочу, действительно является комбинацией двух, таких как Width="\*"
, MinWidth="Auto"
, так что при наличии дополнительной ширины столбцы будут располагаться на равной ширине, но когда сетка будет уменьшена, контент никогда не будет обрезаны.
К сожалению, MinWidth="Auto"
не существует, поэтому я предполагаю, что мне нужно связать свойство столбца MinWidth
, но трудно точно определить, к чему я его привяжу.
Как сообщить WPF "MinWidth="
ширину самого широкого фрагмента содержимого столбца?
Ответы
Ответ 1
Я знаю его немного поздно, но я нашел ваш вопрос и запрограммировал решение pure-XAML.
<ColumnDefinition Width="42*" MinWidth="{Binding Path=ActualWidth, ElementName=projectInfoHeader }"/>
Где ElementName
указывает на элемент управления, занимающий большую часть пространства. Конечно, это возможно только с элементами, которые имеют ограниченную ширину.
Если вы делаете это, например, для GroupBox
, вы можете изменять размер только до большей ширины и никогда не изменять размер до меньшего размера.
Если у вас есть несколько кандидатов на значение MinWidth
, вам нужно написать себе IMultiValueConverter
, который принимает объект [], анализирует его на float и возвращает максимум (его только 1 запрос linq, если вы используйте его только сами и не нужно плохо обращаться с конвертером)
Этот способ также поддерживает динамическое изменение MinWidth
.
Ответ 2
Установите Width = "Auto"
в XAML.
Затем в коде:
MinWidth = ActualWidth
Width = new GridLength(1, GridUnitType.Star)
Ответ 3
У меня также были проблемы с правильной настройкой столбцов Grid внутри GridViewColumn. Было несколько вещей, которые я пытался, но затем я нашел UniformGrid. Это было окончательное решение для меня. Это просто работает. Я не знал этого раньше... кажется, что он не существует в VS toolbox по умолчанию (?) И, следовательно, не знал, что он даже существует.
Подробнее о UniformGrid вы найдете здесь здесь.
Ответ 4
Дайте столбцу имя в 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
}
Ответ 5
Просто вы можете использовать ниже код для установки максимальной или минимальной ширины столбца
<ColumnDefinition Width="*" MaxWidth="40"/>
Это займет свободное место, но оно будет ограничено до 40px
вы можете сделать то же самое с minwidth также
<ColumnDefinition Width="*" MinWidth="50"/>
Это займет свободное место, но обязательно убедитесь, что оно имеет хотя бы 50px пространство.
Надеюсь, это поможет.