在DataGridTemplateColumn中的TextBlock上复制ContextMenu上的命令

时间:2011-10-26 21:52:54

标签: wpf xaml contextmenu copy-paste

想问,因为之前从未在TextBlock上做过这个。我无法复制其中有TextBlock的DataGridTemplateColumn的内容,并为此分配了一个上下文菜单。

复制的内容为空白。

当我在MS中尝试时,单词是Blank Cell。

我的模板列和ContextMenu如下所示。

我尝试使用TextBox但它在启用文本框时工作,尽管网格列是只读的。它允许编辑,当我们禁用它时,它不会复制文本。

 <DataGridTemplateColumn Header="Details" Width="*" IsReadOnly="True">
  <DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
           <Grid>
            <TextBlock Text="{Binding details}" TextWrapping="Wrap">
              <TextBlock.ContextMenu>
                 <ContextMenu>
                    <MenuItem Header="Copy" Command="Copy"></MenuItem>    
                 </ContextMenu>   
              </TextBlock.ContextMenu>
             </TextBlock>
           </Grid>
   </DataTemplate>
 </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

2 个答案:

答案 0 :(得分:2)

为什么复制的内容为空字符串是TextBlock不支持像 TextBox 这样的复制,剪切和过去命令。因此,如果使用TextBlock,您需要手动支持这些命令,但您可以使用TextBox来支持复制命令,该命令可以充当TextBlock。请检查以下内容。

<TextBox Background="Transparent" BorderThickness="0" Text="{Binding details}" IsReadOnly="True" TextWrapping="Wrap">
    <TextBox.ContextMenu>
        <ContextMenu>
            <MenuItem Header="Copy" Command="Copy"></MenuItem>
        </ContextMenu>
    </TextBox.ContextMenu>
</TextBox>

[更新]

首先,下面的代码可以正确执行吗?

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TextBox Background="Transparent" BorderThickness="0" Text="test" IsReadOnly="True" TextWrapping="Wrap">
            <TextBox.ContextMenu>
                <ContextMenu>
                    <MenuItem Header="Copy" Command="Copy"></MenuItem>
                </ContextMenu>
            </TextBox.ContextMenu>
        </TextBox>
    </Grid>
</Window>

答案 1 :(得分:0)

在我的特定情况下,我通过以下方式解决了该问题:

  • 从该行中删除IsReadOnly
  • 我使用Command=Copy而不是使用Command="{Binding CopyToClipboard}",而是将命令绑定到该行后面的ViewModel。