我想设置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>
类似这样的事情(如下所示),在列之间有相等的空间,并且根据数据网格单元格中定义的内容宽度来调整列。
答案 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一起使用以计算当前时间的最大宽度,从那里可能需要更新所有具有新列宽的列。
您需要使用文本+网格父对象作为多转换器的参数。