如何在 WPF、C# 中通过 CTRL+V 粘贴

How can I paste by CTRL+V in WPF, C#

我有 C# WPF 项目,我有 4 个单元格,我尝试将一些代码粘贴到这些单元格(如 PIN 码),但是当我单击 CTRL+V 时,它只将第一个数字复制到第一个单元格。 我该如何解决?

.xaml 文件

<StackPanel Style="{DynamicResource HorizontalPanel}" >
                    <Menu>
                        <MenuItem Command="ApplicationCommands.Paste" />
                    </Menu>
                    <Border Style="{DynamicResource DigitBorder}">
                        <TextBox Style="{DynamicResource Digit1Text}" Name="Digit1" TextChanged="Digit1_TextChanged" />
                    </Border>
                    <Border Style="{DynamicResource DigitBorder}">
                        <TextBox Style="{DynamicResource Digit2Text}" Name="Digit2" TextChanged="Digit2_TextChanged"/>
                    </Border>
                    <Border Style="{DynamicResource DigitBorder}">
                        <TextBox Style="{DynamicResource Digit3Text}" Name="Digit3" TextChanged="Digit3_TextChanged"/>
                    </Border>
                    <Border Style="{DynamicResource DigitBorder}">
                        <TextBox Style="{DynamicResource Digit4Text}" Name="Digit4" TextChanged="Digit4_TextChanged"/>
                    </Border>
</StackPanel>

.xaml.cs 文件:

}

        public PasswordScreen(object object1, object object2, ConnectorAction connectorAction)
        {
            InitializeComponent();
            Digit1.Focus();            
            Object1 = object1;
            Object2 = object2;
            ConnectorAction = connectorAction;          
            MenuItem pasteMenuItem = new MenuItem();          
            pasteMenuItem.Command = ApplicationCommands.Paste;                      
        }

private void Digit1_TextChanged(object sender, TextChangedEventArgs e)
        {
            if (Digit1.Text.Length == 1)
            {
                Digit2.Focus();
            }          
        }

与 Digit2_TextChanged、Digit3_TextChanged、Digit4_TextChanged

相同

我不明白我是如何抓住这里的 pin 代码并将每个数字粘贴到不同单元格上的? 强调文本

如果我理解正确的话,您想将 4 位 PIN 码和每个数字粘贴到一个文本框中。

一种方法是在文本框的文本更改中处理它(第一个文本框的示例,如果所有文本框都支持拆分,则需要对其他文本框进行修改):

private void Digit1_TextChanged(object sender, TextChangedEventArgs e)
    {
        if (Digit1.Text.Length <= 1)
            return;
        
        string text = Digit1.Text;
        Digit2.Text = text[1].ToString();
        if (text.Length > 2)
            Digit3.Text = text[2].ToString();
        if (text.Length > 3)
            Digit4.Text = text[3].ToString();

        Digit1.Text = text[0].ToString();
    }

或者编写自己的粘贴命令,可以通过单击按钮或快捷方式调用:

private void MenuItem_Click(object sender, RoutedEventArgs e)
    {
        if (!Clipboard.ContainsText())
            return;

        string clipboardText = Clipboard.GetText();

        if (string.IsNullOrEmpty(clipboardText))
            return;

        int length = clipboardText.Length;
        if (length > 0)
            Digit1.Text = clipboardText[0].ToString();
        if (length > 1)
            Digit2.Text = clipboardText[1].ToString();
        if (length > 2)
            Digit3.Text = clipboardText[2].ToString();
        if (length > 3)
            Digit4.Text = clipboardText[3].ToString();
    }