WPF将带有换行符的unicode文本粘贴到多个文本框中

时间:2017-07-27 15:22:59

标签: c# .net wpf unicode paste

我生成如下文本框:

for (byte i = 0; i < 4; ++i)
    for (byte j = 0; j < 4; ++j)
        Letterbox[i, j] = new TextBox();
        Letterbox[i, j].Style = style; //MaxLength=1 among other things
        ...

我希望像这样粘贴字符串:

T
Ę
Ś
T

将导致前4个文本框连续包含“T”,“Ę”,“Ś”和“T”。 我怎样才能做到这一点?

澄清(编辑):

我希望能够在应用程序运行时以此格式粘贴任何字符串(letter,enter,letter,enter ...),而不是硬编码

Here's an image explaining what I want.

1 个答案:

答案 0 :(得分:1)

您可以使用AddPasteHandler

像这样:

DataObject.AddPastingHandler(tb, OnPaste);

OnPaste方法实现:

    private void OnPaste(object sender, DataObjectPastingEventArgs e)
    {
        var isText = e.SourceDataObject.GetDataPresent(DataFormats.UnicodeText, true);
        if (!isText) return;

        var text = e.SourceDataObject.GetData(DataFormats.UnicodeText) as string;
        HandlePaste(text);

        e.Handled = true;
    }

    private void HandlePaste(string text)
    {
        var letters = text.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
        if (letters.Length == 4)
        {
            for (var i = 0; i < 4; i++)
            {
                Letterbox[0, i].Text = letters[i];
            }
        }
    }

tb是我窗口上的其他TextBox,您可以使用符合您要求的任何内容。 在HandlePaste粘贴的字符串由换行符分割,当它适合4个文本框时,每个文本框的文本都设置为适当的字母。你可以在这里添加一些更多的验证,例如检查每个字符串是否只有一个字符串。