#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 * на свою привязку