gpt4 book ai didi

WPF 数据网格列标题跨越多个列

转载 作者:行者123 更新时间:2023-12-02 04:34:03 26 4
gpt4 key购买 nike

在 WPF 数据网格中是否可以对列标题进行分组?

我追求的是

| Column 1 | Column 2 | Column 3|
| a b c | a b c | a b c |
| z x y | z x y | z x y |

我四处搜寻,没有找到明显的方法来做到这一点。我可以使用模板化列,然后模仿每个模板中的额外单元格,但这对于排序等来说效果不佳。

我想我所说的只是我正在寻找的是人们如何设法将列标题跨越多个列。

任何帮助或想法将不胜感激。

最佳答案

这是一个旧线程,但我认为我应该分享我是如何做到的。

在我的应用程序中,我想在单个列标题“维护费日期”下显示三列日期条目。我创建了一列,其中有两个 DataTemplate,一个用于显示,一个用于编辑:

<DataGrid.Resources>
<DataTemplate x:Key="cellTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<TextBlock x:Name="tbDate1"
Text="{Binding Path=Date1}"
Grid.Column="0" />
<TextBlock x:Name="tbDate2"
Text="{Binding Path=Date2}"
Grid.Column="1" />
<TextBlock x:Name="tbDate3"
Text="{Binding Path=Date3}"
Grid.Column="2" />
</Grid>
</DataTemplate>
<DataTemplate x:Key="cellEditingTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<DatePicker Grid.Column="0"
Margin="0"
Name="dpDate1"
Width="100"
SelectedDate="{Binding Path=Date1}" />
<DatePicker Grid.Column="1"
Margin="0"
Name="dpDate2"
Width="100"
SelectedDate="{Binding Path=Date2}" />
<DatePicker Grid.Column="2"
Margin="0"
Name="dpDate3"
Width="100"
SelectedDate="{Binding Path=Date3}" />
</Grid>
</DataTemplate>

然后我将该列定义为 DataGridTemplateColumn,指向上面的 DataTemplate:

<DataGrid.Columns>
....
<DataGridTemplateColumn CellTemplate="{StaticResource cellTemplate}"
Header="Maintenance Fee Dates"
CellEditingTemplate="{StaticResource cellEditingTemplate}" />
....
</DataGrid.Columns>

由于 DataTemplate 是使用具有三个固定长度列的网格进行布局的,因此我在单列标题下获得了三个漂亮的日期列(或编辑时的 DatePickers)。

水平网格线可以由网格处理。要在三列之间有垂直网格线,只需将中间列的控件放在边框控件中即可。将 Border 控件设置为与 Grid 列相同的宽度,仅显示其左右边框,并将其 BorderBrush 设置为与 DataGrid 网格线的颜色相匹配:

  <DataTemplate x:Key="cellTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<TextBlock x:Name="tbDate1"
Text="{Binding Path=Date1}"
Grid.Column="0" />
<Border BorderThickness="1,0,1,0"
BorderBrush="DarkGray"
Width="100">
<Border.Child>
<TextBlock x:Name="tbDate2"
Text="{Binding Path=Date2}"
Grid.Column="1" />
</Border.Child>
</Border>
<TextBlock x:Name="tbDate3"
Text="{Binding Path=Date3}"
Grid.Column="2" />
</Grid>
</DataTemplate>

关于WPF 数据网格列标题跨越多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2638239/

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