如何根据放置在Datagrid单元格中内容的宽度来设置Datagridcolumn的宽度

时间:2018-11-23 05:55:04

标签: c# wpf wpf-controls wpfdatagrid datagridviewcolumn

我想设置Datagridcolumn的宽度,以使列的宽度应基于放置在Datagrid单元格中的内容的大小来确定, 列之间的间距相等。

这是我到目前为止尝试过的:

<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 :(得分:0)

这是您可以尝试的方法,可以使用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一起使用以计算当前时间的最大宽度,从那里可能需要更新所有具有新列宽的列。

您需要使用文本+网格父对象作为多转换器的参数。