转换代码从Windows窗体应用程序到WPF

本文关键字:应用程序 WPF 窗体 Windows 代码 转换 | 更新日期: 2023-09-27 18:18:39

我正试图将代码从WFA (Windows窗体应用程序)转换为WPF。然而,我遇到了很多困难。没有。maxlength。当使用Windows窗体应用程序时,也没有。text。我该如何为WPF重写以下代码?

xbox指的是聊天窗口中的一个框,用户在其中输入文本....

p。下面的代码确实适用于WFA....

private void BoxChatAreaKeyPress(object sender, KeyPressEventArgs e)
{
    var xBox = (RichTextBox) sender;
    //setting a limit so the user cannot type more than 4000 characters at once
    xBox.MaxLength = 4000;
    if ((xBox.Text.Length > 1) && (e.KeyChar == (char) Keys.Enter))
    {
        WriteMessage(xBox);
    }
}
private static void WriteMessage(RichTextBox xBox)
{
    var writer = new StreamWriter(_client.GetStream());
    String message = xBox.Text.TrimEnd(''n') + "|" + _font.Name;
    writer.WriteLine(message);
    writer.Flush();
    xBox.Text = null;
}

转换代码从Windows窗体应用程序到WPF

我是这么想的:

private void BoxChatAreaKeyPress(object sender, KeyEventArgs e)
{
    var xBox = (RichTextBox)sender;
    // Setting a limit so the user cannot type more than 4000 characters at once
    var textRange = new TextRange(xBox.Document.ContentStart, xBox.Document.ContentEnd);
    var textLen = textRange.Text.Trim();
    if (textLen.Length <= 4000)
    {
        if ((textLen.Length > 1) && (e.Key == Key.Enter))
        {
            WriteMessage(xBox);
        }
    }
    else
    {
        e.Handled = true;
    }
}

根据应用程序的复杂性,直接从WinForm转换到WPF可能不是那么简单。来回答你的两个具体问题。

1)如你所知,在WPF的RichTextBox上没有MaxLength属性。解决这个问题的一种方法是在用户输入一个字符后记录字符数,并检查它是否大于您的限制。例如(从这里):

private void xBox_KeyDown(object sender, KeyEventArgs e)
{
     TextRange tr = new TextRange(xBox.Document.ContentStart ,
                                    xBox.Document.ContentEnd);
     if (tr.Text.Length >= 4000 || e.Key == Key.Space || e.Key == Key.Enter)
     {
           e.Handled = true;
           return;
     }
}
2)同样,您可以使用TextRange属性来获取RTB中的文本:
TextRange xBoxTR = new TextRange(xBox.Document.ContentStart, 
                                  xBox.Document.ContentEnd);
string xBoxText = xBoxTR.Text;