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

时间:2011-12-21 00:38:48

标签: c# .net wpf winforms

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

xbox是指聊天窗口中用户输入文字的方框....

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

2 个答案:

答案 0 :(得分:1)

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

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

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;

答案 1 :(得分:1)

这就是我提出的:

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;
    }
}