gpt4 book ai didi

c# - DataGrid 选择整列

转载 作者:行者123 更新时间:2023-11-30 16:26:13 25 4
gpt4 key购买 nike

我正在使用 WPF DataGrid,我希望允许用户通过单击列标题来选择整个列。我目前将 SelectionUnit 设置为 CellOrRowHeader,因为我希望行具有相同的功能(效果很好)。是否有一种简单的方法也允许通过单击列标题来选择列?

最佳答案

您有多种选择。一种是为 DataGrid 的页眉样式创建您自己的模板。在 DataTemplate 标记内,您可以更改 header 的模板。 (您可以将 Button 替换为 TextBlock 或任何您想要的东西。)

<DataGrid>
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader" >
<Setter Property="Foreground" Value="Blue" />
<Setter Property="ContentTemplate" >
<Setter.Value>
<DataTemplate>
<Button Content={Binding Content}" MouseDown="mouseDownEventHandler">
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.ColumnHeaderStyle>
</DataGrid>

或者如果您使用 DataGrid.Columns 来填充您的列并且您需要分别设置它们中的每一个,您可以使用这个:

<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn HeaderTemplate="{StaticResource MyTemplate1"/>
<DataGridHyperlinkColumn HeaderTemplate="{StaticResource MyTemplate2"/>
</DataGrid.Columns>
</DatGrid>

MyTemplate1 和 2 应该事先在控件的资源中定义。


编辑:

根据 this link 的另一种方法是将 PreviewMouseDown 添加到您的 DataGrid,然后找出鼠标按下是否发生在标题上。

这是她的事件处理程序的简单版本:

DependencyObject dep = (DependencyObject)e.OriginalSource;
while ((dep != null) && !(dep is DataGridColumnHeader))
{
dep = VisualTreeHelper.GetParent(dep);
}
if (dep == null) return;
if (dep is DataGridColumnHeader)
{
MessageBox.Show(((DataGridColumnHeader)dep).Content.ToString());
}

关于c# - DataGrid 选择整列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9065066/

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