将右键单击上下文菜单添加到xaml中的数据网格列

时间:2015-10-12 07:46:08

标签: c# wpf xaml contextmenu commandbinding

 <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>

我想在此特定列的上下文菜单中添加复制选项&#34; S.No&#34;数据网格。但整行的内容被复制而不是网格中只有一个单元格。如何只复制应用了上下文的一个单元格而不是整行?

2 个答案:

答案 0 :(得分:0)

为您的命令使用CommandParamter,如下所示:

 <paper-dialog>
    <h2>Header</h2>
    <paper-dialog-scrollable>
        Lorem ipsum...
    </paper-dialog-scrollable>
    <div class="buttons">
     <paper-button dialog-dismiss>Cancel</paper-button>
     <paper-button dialog-confirm>Accept</paper-button>
   </div>
</paper-dialog>

在代码中更改命令参数,然后就可以使用它了。

答案 1 :(得分:0)

您可以在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);
        }
    }
}