Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 禁用从WPF安装程序的外部源复制和粘贴内容_C#_Wpf_Installation_Windows Installer - Fatal编程技术网

C# 禁用从WPF安装程序的外部源复制和粘贴内容

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

我试图在xamlWPF的特殊窗口中禁用复制/粘贴/剪切功能

我在特殊窗口的属性中设置了PreviewKeyDown=Window\u PreviewKeyDown。这样,任何向下的键都将跟踪并取消。下面的代码对于禁止外部复制和粘贴是有效的

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();
        }