Преобразовать код из приложения Windows Form в WPF? - PullRequest
0 голосов
/ 21 декабря 2011

Я пытаюсь преобразовать код из WFA (Windows Form Application) в WPF.Однако я сталкиваюсь со многими трудностями.Там нет .MaxLength.Также нет .Text, как при использовании приложения Windows Form.Как бы я переписать следующий код для 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 ]

1 голос
/ 21 декабря 2011

Вот что я придумал:

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;
    }
}
1 голос
/ 21 декабря 2011

В зависимости от сложности вашего приложения, прямое преобразование из WinForm в WPF может быть затруднено.Чтобы ответить на ваши две конкретные проблемы.

1) Как вы знаете, в RichTextBox в WPF нет свойства 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;
...