Как установить ширину столбца данных в зависимости от ширины содержимого, помещенного в ячейку данных - PullRequest
0 голосов
/ 23 ноября 2018

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

Это то, что я пробовал до сих пор:

<DataGrid  x:Name="MyGrid"  AutoGenerateColumns="False" BorderBrush="Transparent"  
        GridLinesVisibility="None" Background="Transparent" RowHeaderWidth="0" > 
 <DataGrid.Resources>
 <Style  TargetType="{x:Type DataGridColumnHeader}">
     <Setter Property="Background" Value="Transparent" />
     <Setter Property="FontFamily" Value="Segoe UI"/>
     <Setter Property="FontWeight" Value="Normal"/>
     <Setter Property="FontSize" Value="20"/>
     <Setter Property="Padding" Value="0,5"/>
 </Style>
 </DataGrid.Resources>
<DataGrid.Columns>
        <DataGridTemplateColumn Header = "Column 1">
               <DataGridTemplateColumn.CellTemplate>
                   <DataTemplate>
                          <TextBlock Text="{Binding SomeText}" Width=120 TextWrapping="WrapWithOverflow" />
                   </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>  

        <DataGridTemplateColumn ..../>
        <DataGridTemplateColumn ..../>             
</DataGrid.Columns>
</Datagrid> 

Что-то вроде этого (как показано ниже), когда между столбцами одинаковое пространство, а столбцы настраиваются на основе ширины содержимого, определенного в ячейке сетки данных.

enter image description here

1 Ответ

0 голосов
/ 23 ноября 2018

Вот что вы можете попробовать: ширина строки может быть рассчитана с использованием класса TextFomratter ( при условии, что ваша сетка содержит только текст ), так что вам нужно будет передать способрассчитать ширину самого большого столбца, который можно вычислить с помощью привязки - RelativePath и т. д.

private Size MeasureString(string candidate)
{
    var formattedText = new FormattedText(
        candidate,
        CultureInfo.CurrentCulture,
        FlowDirection.LeftToRight,
        new Typeface(this.textBlock.FontFamily, this.textBlock.FontStyle, this.textBlock.FontWeight, this.textBlock.FontStretch),
        this.textBlock.FontSize,
        Brushes.Black,
        new NumberSubstitution(),
        1);

    return new Size(formattedText.Width, formattedText.Height);
} 

Вы можете использовать приведенный выше код с MultiConverter , чтобы получить ссылку народительский объект Grid, который вы можете использовать с forloop для вычисления максимальной ширины в текущий момент времени, оттуда вам может потребоваться обновить все столбцы с новой шириной столбца.

Возможно, вам понадобится text + Gridродительский объект в качестве параметров для мультиконвертера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...