Подтвердить что ты не робот

WPF - столбец DataGrid с шириной = "*", но MinWidth to Fit Contents

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

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

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

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

4b9b3361

Ответ 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 пространство. Надеюсь, это поможет.