You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为WPF TextBox添加复制事件处理程序并实现复制前处理?

WPF TextBox 复制事件处理方案

可以给WPF TextBox添加复制事件处理程序,WPF里存在和HTML onCopy等价的拦截时机——**CommandManager.PreviewExecuted**事件,它能在复制操作触发前拦截并执行自定义逻辑,是覆盖所有复制触发场景的最优方案。此外也可以通过PreviewKeyDown针对快捷键触发的复制做处理,下面是具体实现:

方法一:使用PreviewExecuted事件(推荐)

该事件会拦截所有触发复制的操作(快捷键、右键菜单、编辑菜单),在默认复制行为执行前触发:

XAML 代码

<TextBox x:Name="MyTextBox" PreviewExecuted="MyTextBox_PreviewExecuted"/>

后台C# 代码

private void MyTextBox_PreviewExecuted(object sender, ExecutedRoutedEventArgs e)
{
    if (e.Command == ApplicationCommands.Copy)
    {
        // 在这里执行复制前的自定义处理逻辑
        string selectedText = MyTextBox.SelectedText;
        string processedText = $"【处理后】{selectedText}";

        // 将处理后的内容写入剪贴板
        Clipboard.SetText(processedText);
        
        // 标记事件已处理,阻止默认复制行为执行
        e.Handled = true;
    }
}

方法二:使用PreviewKeyDown事件(仅针对快捷键)

如果只需要处理Ctrl+C这类快捷键触发的复制,可以用此方法:

XAML 代码

<TextBox x:Name="MyTextBox" PreviewKeyDown="MyTextBox_PreviewKeyDown"/>

后台C# 代码

private void MyTextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
    // 判断是否为Ctrl+C组合键
    if (e.Key == Key.C && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
    {
        // 自定义处理逻辑
        string selectedText = MyTextBox.SelectedText;
        string processedText = $"【处理后】{selectedText}";
        Clipboard.SetText(processedText);
        
        // 阻止默认复制行为
        e.Handled = true;
    }
}

内容的提问来源于stack exchange,提问作者Darshana Suresh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:24:53