2011-12-21 18 views
-1

我試圖將代碼從WFA(Windows窗體應用程序)轉換爲WPF。但是,我遇到了很多困難。沒有.MaxLength。當使用Windows窗體應用程序時,也沒有.Text。我將如何重新編寫WPF的以下代碼?將代碼從Windows Form Application轉換爲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; 
} 
+1

我並不是要求你轉換整個東西,我只是想知道.Text和.MaxLength的方式。謝謝你沒有幫助...! – BigBug 2011-12-21 00:49:08

+0

然後問具體問題。至於你的一般問題(遇到很多困難),你將無法在不學習WPF的情況下將表單應用程序轉換爲WPF。 – Paparazzi 2011-12-21 02:10:31

+1

您是否通過互聯網發送每個按鍵的整個文本? – MikeKulls 2011-12-21 02:23:01

回答

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

好的,謝謝,我明白了 – BigBug 2011-12-21 01:23:14

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;