Как настроить ширину столбца для содержимого?

#wpf #datagrid

Вопрос:

У меня есть столбец в datagrid, в котором я устанавливаю ширину textblck с помощью многозначного конвертера. Но ширина столбца не изменяется. Я бы хотел, чтобы столбец ширины соответствовал содержимому текстового блока.

Столбец такой:

             <DataGridTextColumn Header="Columna2" Binding="{Binding}" Width="AUTO">
                <DataGridTextColumn.ElementStyle>
                    <Style TargetType="{x:Type TextBlock}">
                        <Setter Property="HorizontalAlignment" Value="Left"/>
                        <Setter Property="Background" Value="Orange"/>
                        <Setter Property="Width">
                            <Setter.Value>
                                <MultiBinding Converter="{StaticResource MiMultiValueConverter}">
                                    <Binding Path="UseConverterIsChecked" Source="{StaticResource vm}"/>
                                    <Binding Path="WidthColumn2" Source="{StaticResource vm}"/>
                                </MultiBinding>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </DataGridTextColumn.ElementStyle>
            </DataGridTextColumn>
 

Я знаю, что текстовый блок имеет правильный размер, потому что я установил фон, чтобы увидеть, какой реальный размер текстового блока.

Это исходный размер:

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

И это когда конвертер устанавливает значение текстового блока:

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

Как я могу настроить размер столбца?

Спасибо.

Редактировать:

Если я использую горизонтальное растяжение, как рекомендуется в каком-то комментарии, я получаю этот результат:

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

Редактировать:

Это код MiMultiValueConverter:

 public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
    bool miBlUsarConverter = (bool)values[0];
    double miDbAncho = (double)values[1];

    return (miBlUsarConverter) ? miDbAncho : 200;
}
 

Комментарии:

1. Почему вы устанавливаете Width TextBlock значение, которое вы хотите настроить для ширины столбца? Это не имеет смысла. Почему вы не устанавливаете ширину столбца?

Ответ №1:

Вы устанавливаете ширину элементов, содержащихся внутри столбца DataGrid, вместо фактического столбца. Правильным способом изменения размера вашего столбца было бы установить свойство width самого DataGridTextColumn:

 <DataGridTextColumn Header="Columna2" Binding="{Binding}" Width="1*">
 

В вашем случае вы захотите заменить его своей привязкой сверху.

Для получения дополнительной информации, вот официальный документ: https://docs.microsoft.com/en-us/dotnet/desktop/wpf/controls/sizing-options-in-the-datagrid-control?view=netframeworkdesktop-4.8

Комментарии:

1. Я пробовал выравнивание по горизонтали как растяжение, но результат не является ожидаемым. Я добавил результат в исходное сообщение.

2. Я неправильно понял ваш вопрос. Что делает ваш конвертер, так это изменяет размер элементов, содержащихся в столбце, а не самого столбца. Я отредактирую свой ответ.

3. Я добавил код конвертера.

4. Я пробовал использовать width=»1 *» в DataGridTextColumn, но это не работает, когда я изменяю размер на меньшую ширину, чем фактическая ширина столбца, размер столбца не изменяется.

5. предполагается, что вы должны заменить 1 * на свою привязку