gpt4 book ai didi

c# - 使用 DataGrid 在一列中显示多个标题

转载 作者:太空狗 更新时间:2023-10-29 23:23:35 32 4
gpt4 key购买 nike

我想在一列中有多个属性,如下所示:

DataGrid with more than one header in a column.

现在,创建一个显示多个属性的单元格模板很容易,但是如何创建一个显示多个属性且仍然允许您通过单击它们进行排序的页眉模板呢?因此,只需单击 First Name 标题,您就应该能够按 first name 排序,所有其他属性也是如此。

最佳答案

您可以使用两个 TextBlock。在 Tag 属性中,您应该从数据类中传输属性名称。此字符串来自 Tag 属性,您将使用它来设置 SortMemberPath。在 MouseLeftButtonDown 事件中,您可以从 Tag 属性中获取实际排序属性的名称,并将其分配给 SortMemberPath

<DataGrid Name="dataGrid1" ItemsSource="{Binding}" AutoGenerateColumns="False" Margin="0,0,0,52">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.HeaderTemplate >
<DataTemplate>
<Grid ShowGridLines="True">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Text="First Name" Tag="FirstName" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown" />
<TextBlock Text="Last Name" Grid.Row="1" Tag="LastName" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown" />
</Grid>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBox Text="{Binding FirstName}"/>
<TextBox Text="{Binding LastName}" Grid.Row="1" />
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Age" Binding="{Binding Age}" />
</DataGrid.Columns>
</DataGrid>

代码隐藏:

private void TextBlock_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
TextBlock s = sender as TextBlock;
string sortPath = s.Tag as string;
dataGrid1.Columns[0].SortMemberPath = sortPath;
}

如果您想显示哪个属性当前正在排序属性并加粗字体,您还可以添加 TextBlock 样式。

<DataGridTemplateColumn.HeaderTemplate >
<DataTemplate>
<Grid ShowGridLines="True">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Text="First Name" Tag="FirstName" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="FontWeight" Value="Normal" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Columns[0].SortMemberPath, ElementName=dataGrid1}">
<DataTrigger.Value>
<sys:String>FirstName</sys:String>
</DataTrigger.Value>
<Setter Property="FontWeight" Value="Bold" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<TextBlock Text="Last Name" Grid.Row="1" Tag="LastName" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown" >
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="FontWeight" Value="Normal" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Columns[0].SortMemberPath, ElementName=dataGrid1}">
<DataTrigger.Value>
<sys:String>LastName</sys:String>
</DataTrigger.Value>
<Setter Property="FontWeight" Value="Bold" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>

sys 是以下命名空间:

xmlns:sys="clr-namespace:System;assembly=mscorlib"

关于c# - 使用 DataGrid 在一列中显示多个标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16696755/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com