我有像这样的自定义列的DataGrid
<DataGridTemplateColumn Width="2*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding SomeProperty}"/>
<TextBlock Grid.Column="0" Text="{Binding OtherProperty}"/>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Width="*" Header="Const" Binding="{Binding ConstantValue}" />
如您所见,第一列具有第二列的双倍宽度并包含两个texblock。所以我需要make header包含两个单词。相应TexBlock
以上的每个字。我尝试使用带有两列的Grid(因为我有两列中的文本块)作为HeaderTemplate
。我尝试将HeaderStyle
设置为
<DataGridTemplateColumn.HeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Style.Setters>
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" HorizontalAlignment="Center">Header1</TextBlock>
<TextBlock Grid.Column="1" HorizontalAlignment="Center">Header2</TextBlock>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
我尝试使用HeaderTemplate
之类的
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" HorizontalAlignment="Center">Header1</TextBlock>
<TextBlock Grid.Column="1" HorizontalAlignment="Center">Header2</TextBlock>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
但在这两种情况下我都有相同的错误结果。即。 Header1
和Header2
放置了没有任何空格的Header1Header2
。看起来Header1Header2
有HorizontalAligment
=“左”相对整个标题。
即
列边框 - &gt; | Header1Header2
_ __ _ __ _ __ _ < / em> _ |&lt; - 列边框
因此Header1
和Header2
不会放在DataGrid
中相应的TextBlock上方。
我怎样才能解决我的问题?我该如何设置HeaderTemplate
以获取我想要的内容?
答案 0 :(得分:1)
自定义ControlTemplate
会为您工作吗?
<DataGridTemplateColumn.HeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Style.Setters>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" HorizontalAlignment="Center">Header1</TextBlock>
<TextBlock Grid.Column="1" HorizontalAlignment="Center">Header2</TextBlock>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
</DataGridTemplateColumn.HeaderStyle>
您的另一个选择是创建自己的DataGridColumnHeadersPresenter
,这将提示标题的可用大小。默认情况下,标题“ContentPresenters
”不会被告知可用的大小,并会根据其内容(DataTemplate
)计算宽度。
在您的情况下,未明确设置宽度(例如<Grid Width="200">
),因此它只是TextBoxes
的组合大小。