(WPF DataGrid) 如何使用上下文菜单复制 Datagrid header 文本?
(WPF DataGrid) How to copy Datagrid header text with a context menu?
我正在使用 WPF 数据网格。
我在 header 列中添加了上下文菜单,但我不知道如何在菜单项单击事件中复制 header 文本。
我尝试使用 DataGrid.CurrentColumn 但它是空的
非常感谢!
尝试使用所选单元格获取列 header:
foreach (var item in e.SelectedCells)
{
DataGridRow row = (DataGridRow)dg.ItemContainerGenerator.ContainerFromItem(item.Item);
var col = item.Column as DataGridColumn;
MessageBox.Show("" + col.Header);
}
编辑
如果您想获取当前所在的列 header 添加以下代码:
在资源中放这个:
<ContextMenu x:Key="cm">
<MenuItem Header="Click"
Click="mi_Click"
CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=Parent}" />
</ContextMenu>
然后像这样添加列 header 样式:
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="ContextMenu" Value="{StaticResource cm}"></Setter>
</Style>
然后像这样把代码放在后面:
private void mi_Click(object sender, RoutedEventArgs e)
{
MenuItem mi = sender as MenuItem;
if (mi != null)
{
ContextMenu cm = mi.CommandParameter as ContextMenu;
if (cm != null)
{
var ch = cm.PlacementTarget as System.Windows.Controls.Primitives.DataGridColumnHeader;
if (ch != null)
{
MessageBox.Show(ch.Content.ToString());
}
}
}
}
我正在使用 WPF 数据网格。
我在 header 列中添加了上下文菜单,但我不知道如何在菜单项单击事件中复制 header 文本。
我尝试使用 DataGrid.CurrentColumn 但它是空的
非常感谢!
尝试使用所选单元格获取列 header:
foreach (var item in e.SelectedCells)
{
DataGridRow row = (DataGridRow)dg.ItemContainerGenerator.ContainerFromItem(item.Item);
var col = item.Column as DataGridColumn;
MessageBox.Show("" + col.Header);
}
编辑 如果您想获取当前所在的列 header 添加以下代码:
在资源中放这个:
<ContextMenu x:Key="cm">
<MenuItem Header="Click"
Click="mi_Click"
CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=Parent}" />
</ContextMenu>
然后像这样添加列 header 样式:
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="ContextMenu" Value="{StaticResource cm}"></Setter>
</Style>
然后像这样把代码放在后面:
private void mi_Click(object sender, RoutedEventArgs e)
{
MenuItem mi = sender as MenuItem;
if (mi != null)
{
ContextMenu cm = mi.CommandParameter as ContextMenu;
if (cm != null)
{
var ch = cm.PlacementTarget as System.Windows.Controls.Primitives.DataGridColumnHeader;
if (ch != null)
{
MessageBox.Show(ch.Content.ToString());
}
}
}
}