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

发布于 2024-12-12 09:00:07 字数 930 浏览 0 评论 0原文

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

复制的内容是空白的。

当我在 MS Word 中尝试时,它是空白单元格。

我的模板列和上下文菜单如下。

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

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

Thought of asking because never done this before on a TextBlock. I Am not able to copy the content of the DataGridTemplateColumn where it has a TextBlock in that and i have assigned a context menu to that.

The copied content is blank.

When I tried in MS word is Blank Cell.

My Template Column and ContextMenu are as below.

I Tried using TextBox But it work when the textbox is enabled and in-spite of grid column is readonly. It allows editing and when we disable it won't copy the text.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浅忆流年 2024-12-19 09:00:07

为什么复制的内容是空字符串是因为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>

Why the copied content is empty string is that TextBlock does not support Copy, Cut and Past Commands like TextBox. So If using TextBlock, you'll need to support these commands manually, but you can use TextBox to support the copy command, which could act as TextBlock. Please check the following.

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

[updated]

First of all, the code below can be executed correctly?

<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>
凉城凉梦凉人心 2024-12-19 09:00:07

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

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

In my particular case, I fixed the issue by:

  • Removing IsReadOnly from the row.
  • Instead of using Command=Copy, I used Command="{Binding CopyToClipboard}" with a binding of the command to the ViewModel behind the row.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文