Windows 8 如何阻止在文本框(WinRT)中粘贴文本?

Windows 8 如何阻止在文本框(WinRT)中粘贴文本?,windows-8,textbox,windows-runtime,copy-paste,Windows 8,Textbox,Windows Runtime,Copy Paste,你能帮我解决我的问题吗?我想阻止文本框的粘贴并控制所有字符都是数字(WinRT)。更新1 如果要阻止ctrl+c和ctrl+v组合,则必须在KeyDown事件中检查该组合。如果您得到了这种组合,您可以使用静态方法Windows.ApplicationModel.DataTransfer.clipboard.clear()清除剪贴板 如果不注意组合键,而只是按ctrl键,那么也可以防止通过键盘粘贴副本 private void TextBox_KeyDown_1(object sender, Ke

你能帮我解决我的问题吗?我想阻止文本框的粘贴并控制所有字符都是数字(WinRT)。

更新1

如果要阻止ctrl+c和ctrl+v组合,则必须在
KeyDown
事件中检查该组合。如果您得到了这种组合,您可以使用静态方法
Windows.ApplicationModel.DataTransfer.clipboard.clear()清除剪贴板

如果不注意组合键,而只是按ctrl键,那么也可以防止通过键盘粘贴副本

private void TextBox_KeyDown_1(object sender, KeyRoutedEventArgs e)
{
    if (e.Key == Windows.System.VirtualKey.Control)
        Windows.ApplicationModel.DataTransfer.Clipboard.Clear();
}

要允许用户仅输入数字数据,您可以使用
TextBox
TextChanged
事件。使用仅限数字的正则表达式过滤掉字符。此外,要禁用
文本框的上下文菜单
上下文菜单打开
事件将帮助您。下面是整个代码

XAML


使用Shift A挡块整个通道。上下移动或侧箭头以阻止小部件。右键单击被阻止的文章以“复制”并粘贴。

从Windows 8.1开始,您将获得一个可订阅的“粘贴”事件。只需订阅它并将事件的
Handled
属性设置为
true
,即可阻止它到达文本框。

要阻止粘贴,请执行以下操作: 1.从粘贴事件中阻止它

    txtBox1.Paste += ADDTextBox_Paste;

    void ADDTextBox_Paste(object sender, TextControlPasteEventArgs e) 
    {e.Handled = true;return; }
  • 阻止shift+insert和Ctrl+V的向下键事件

    void txtBox1_KeyDown(object sender, KeyRoutedEventArgs e)
        {            
            var shiftState = CoreWindow.GetForCurrentThread().GetKeyState(VirtualKey.Shift);
            var ctrlState = CoreWindow.GetForCurrentThread().GetKeyState(VirtualKey.Control);
    
            if (((shiftState & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down && e.Key == VirtualKey.Insert)
                ||((ctrlState & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down && e.Key == VirtualKey.V))
            {
                e.Handled = true; 
                return; 
            }                       
        }
    
  • 要仅允许数字字符,您必须在Keydown事件中添加以下代码:

    if ((e.Key < VirtualKey.Number0 || e.Key > VirtualKey.Number9) &&
    (e.Key < VirtualKey.NumberPad0 || e.Key > VirtualKey.NumberPad9))
    { e.handled = true; return; }
    
    if((e.KeyVirtualKey.Number9)&&
    (e.KeyVirtualKey.NumberPad9))
    {e.handled=true;返回;}
    
    @ShivanRaptor:)我只想禁用文本框中的复制和粘贴功能。我想它会出现在我的文本框按键事件中。过滤文本框输入是可以的,但我建议不要禁用复制/粘贴。首先,如果用户想要粘贴一个数字怎么办?阻塞只会让用户感到厌烦。不过,最简单的方法是允许任何文本,如果数据格式不正确,则显示一条小错误消息。用户不能在“我的文本框”中输入非数字字符。所以,我已经控制了所有文本更改事件,以检查是否为字符数字,但用户可以复制粘贴非数字字符。因此,我的公司希望禁用我的复制粘贴:)@dlev@TuğrulemRepeatalay OK,但我重申,防止复制/粘贴主要会让您的用户感到烦恼,您应该努力过滤粘贴的文本,而不是直接禁止。@dlev我知道了,但我的老板没有:)谢谢您的回答,但这不是禁用CTRL+C,CTRL+V组合@Xyroid再次感谢@Xyroid,但它对我的项目不起作用?它不正常工作,有时有效,有时无效。我认为没有其他解决方案。你可以阻止Ctrl+V,我将使用Shift+Insert粘贴。)这显然是错误的。告诉你的老板这是不可能的,你需要实现你自己的文本框,这将花费你大约3年的时间来完成,或者几周的时间来实现一个非常糟糕的错误的文本框这看起来是一个很好的答案——很痛苦,因为您必须重新实现向上键或向下键粘贴,更痛苦的b/c
    KeyDown
    发生在
    paste
    之后,但很有效——但我不确定您为什么要在向下键中嗅探ctrl-v和shift-insert。粘贴已被阻止。这些组合之后似乎没有任何作用。
    void txtBox1_KeyDown(object sender, KeyRoutedEventArgs e)
        {            
            var shiftState = CoreWindow.GetForCurrentThread().GetKeyState(VirtualKey.Shift);
            var ctrlState = CoreWindow.GetForCurrentThread().GetKeyState(VirtualKey.Control);
    
            if (((shiftState & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down && e.Key == VirtualKey.Insert)
                ||((ctrlState & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down && e.Key == VirtualKey.V))
            {
                e.Handled = true; 
                return; 
            }                       
        }
    
    if ((e.Key < VirtualKey.Number0 || e.Key > VirtualKey.Number9) &&
    (e.Key < VirtualKey.NumberPad0 || e.Key > VirtualKey.NumberPad9))
    { e.handled = true; return; }