如何在WPF, c#中通过CTRL+V粘贴

  • 本文关键字:CTRL+V 粘贴 WPF c# wpf xaml
  • 更新时间 :
  • 英文 :


我有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 - code和粘贴数字,每个数字在不同的单元格?<<em>强调文本/em>

如果我理解正确,你想粘贴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();
}

最新更新