C# 禁用从WPF安装程序的外部源复制和粘贴内容
我试图在xamlWPF的特殊窗口中禁用复制/粘贴/剪切功能 我在特殊窗口的属性中设置了PreviewKeyDown=Window\u PreviewKeyDown。这样,任何向下的键都将跟踪并取消。下面的代码对于禁止外部复制和粘贴是有效的C# 禁用从WPF安装程序的外部源复制和粘贴内容,c#,wpf,installation,windows-installer,C#,Wpf,Installation,Windows Installer,我试图在xamlWPF的特殊窗口中禁用复制/粘贴/剪切功能 我在特殊窗口的属性中设置了PreviewKeyDown=Window\u PreviewKeyDown。这样,任何向下的键都将跟踪并取消。下面的代码对于禁止外部复制和粘贴是有效的 private void Window_PreviewKeyDown(object sender, KeyEventArgs e) { if(Keyboard.Modifiers == ModifierKeys.Cont
private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
if(Keyboard.Modifiers == ModifierKeys.Control && (e.Key == Key.C || e.Key == Key.X))
{
e.Handled = true;
}
if(Keyboard.Modifiers == ModifierKeys.Control && e.Key == Key.V)
{
e.Handled = true;
}
}
这很有效
现在,我想允许从应用程序本身内部进行复制和粘贴
有没有一种方法可以禁止将外部复制粘贴到应用程序中,除了应用程序中复制和粘贴的内容之外?我可以使用。其想法是限制复制/粘贴,以便在剪贴板中仅允许应用程序自定义数据格式。我用一个文本框对它进行了测试,它只接受内部复制文本的粘贴,而忽略从外部复制的任何内容 第一件事是在xaml中向TextBox添加命令绑定。这允许拦截:CTR+C/V键和上下文菜单点击:
<TextBox>
<TextBox.CommandBindings>
<CommandBinding Command="{x:Static ApplicationCommands.Copy}"
CanExecute="CanCopy"
Executed="Copy" />
<CommandBinding Command="{x:Static ApplicationCommands.Paste}"
CanExecute="CanPaste"
Executed="Paste" />
</TextBox.CommandBindings>
</TextBox>
TODO:修复粘贴并将其重构为附加行为,以提高可重用性。答案如下。我们需要在停用窗口时清除剪贴板,并且可以在激活时将文本再次设置到剪贴板中
private string oldClipboardContent { get; set; } = "";
private void Window_Activated(object sender, EventArgs e)
{
Clipboard.SetText(oldClipboardContent);
}
private void Window_Deactivated(object sender, EventArgs e)
{
oldClipboardContent = Clipboard.GetText();
Clipboard.Clear();
}
您可以将复制的内容存储在复制处理程序中,并将其还原到代码中的粘贴处理程序中。我想您需要自定义剪贴板格式。@很抱歉,我不清楚you@Sinatr我的目标是不允许用户将任何内容从应用程序复制到用户PC,也不允许将任何内容从用户PC复制粘贴到应用程序中。但在应用程序中,必须允许用户复制粘贴information@bunty-choudhary使表单类和if子句中的字段/属性将copeid值存储到其中,并在if中检查字段/属性中的粘贴值。
private string oldClipboardContent { get; set; } = "";
private void Window_Activated(object sender, EventArgs e)
{
Clipboard.SetText(oldClipboardContent);
}
private void Window_Deactivated(object sender, EventArgs e)
{
oldClipboardContent = Clipboard.GetText();
Clipboard.Clear();
}