如何在 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();
}
我有 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();
}