向xaml中的数据网格列添加复制右键单击上下文菜单

本文关键字:复制 添加 右键 单击 菜单 上下文 网格 xaml 数据 数据网 | 更新日期: 2023-09-27 18:17:17

 <DataGridTextColumn Header="S.No" Binding="{Binding SerialNumberId}"
                                            IsReadOnly="True">
                            <DataGridTextColumn.CellStyle>
                                <Style TargetType="DataGridCell" >
                                    <Setter Property="ContextMenu">
                                        <Setter.Value>
                                            <ContextMenu>
                                                <MenuItem Command="Copy"></MenuItem>
                                        </ContextMenu>
                                    </Setter.Value>
                                    </Setter>
                               </Style>
                            </DataGridTextColumn.CellStyle>  
                        </DataGridTextColumn>

我想在数据网格的这个特定列"S.No"的上下文菜单中添加复制选项。但是整个行的内容被复制而不是网格中的一个单元格。如何实现仅复制一个应用上下文的单元格而不是整个行?

向xaml中的数据网格列添加复制右键单击上下文菜单

像这样使用命令参数:

CommandParameter="{Binding RelativeSource={RelativeSource Self}}"

在你的代码中改变你的Command参数,你就可以使用它了

你可以在你的DataGrid上添加一个CommandBinding来绑定一个函数:

<DataGrid x:Name="dataGrid1" AutoGenerateColumns="False">
    <DataGrid.CommandBindings>
        <CommandBinding Command="ApplicationCommands.Copy" Executed="DatagridExecuted" />
    </DataGrid.CommandBindings>
    <DataGrid.Columns>
      ...
    </DataGrid.Columns>
</DataGrid>

在函数中,可以找到事件的来源,

获取对应于一行的DataContext,

,从DataContext中,获得可以放入剪贴板的确切属性

private void DatagridExecuted(object sender, ExecutedRoutedEventArgs e)
{
    DataGridCell cell = e.OriginalSource as DataGridCell;
    if (cell != null)
    {
        Product product = cell.DataContext as Product;
        if (product != null)
        {
            Clipboard.SetText(product.SerialNumberId);
        }
    }
}