C# 是否将Windows窗体应用程序中的代码转换为WPF?

C# 是否将Windows窗体应用程序中的代码转换为WPF?,c#,.net,wpf,winforms,C#,.net,Wpf,Winforms,我正在尝试将代码从WFA(Windows窗体应用程序)转换为WPF。然而,我遇到了很多困难。没有.MaxLength。当使用Windows窗体应用程序时,也没有.Text。如何为WPF重新编写以下代码 xbox指的是聊天窗口中的一个框,用户在其中键入文本 注:以下代码适用于WFA private void BoxChatAreaKeyPress(object sender, KeyPressEventArgs e) { var xBox = (RichTextBox) sender;

我正在尝试将代码从WFA(Windows窗体应用程序)转换为WPF。然而,我遇到了很多困难。没有.MaxLength。当使用Windows窗体应用程序时,也没有.Text。如何为WPF重新编写以下代码

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

注:以下代码适用于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;
}

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

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

2) 同样,您可以使用
TextRange
属性获取RTB中的文本:

TextRange xBoxTR = new TextRange(xBox.Document.ContentStart, 
                                  xBox.Document.ContentEnd);

string xBoxText = xBoxTR.Text;

这就是我想到的:

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;
    }
}
private void-BoxChatAreaKeyPress(对象发送方,KeyEventArgs e)
{
变量xBox=(RichTextBox)发送方;
//设置限制,以便用户一次键入的字符不能超过4000个
var textRange=新的textRange(xBox.Document.ContentStart、xBox.Document.ContentEnd);
var textLen=textRange.Text.Trim();
如果(textLen.Length 1)和(e.Key==Key.Enter))
{
写消息(xBox);
}
}
其他的
{
e、 已处理=正确;
}
}

我不是要你转换整个东西,我只是想知道.Text和.MaxLength的方法。谢谢你没有帮助。。。!然后问具体的问题。至于你的一般性问题(遇到许多困难)如果不学习WPF,您将无法将表单应用程序转换为WPF。您是否在互联网上为每个按键发送全部文本?我认为他确实提出了两个非常合理的具体问题。大多数聊天风格的应用程序只是在某个时间间隔发送一条消息,说“用户正在键入”,然后在他们按下ok时发送整个消息。您不需要附加到字符串,只需从RichTextBox获取文本即可。顺便问一下,你需要RTB吗?标准文本框是否适用于您?它具有MaxLength和Text属性。您可以更改整个框的字体,这似乎是您为RTB所做的全部工作。
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;
    }
}