我正在尝试将代码从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;
}
答案 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;
}
}