2012-11-02 49 views
1

我正在Windows 8 Windows Metro Style App中創建一個聊天應用程序。我需要在XAML的richtextblocktextblock中追加對話。有人會告訴我這個代碼塊的等價物嗎?如何在xaml文本塊或富文本框中附加文本?

public void AppendConversation(string str) 
{ 
    conversation.Append(str); 
    rtbConversation.Text = conversation.ToString(); 
    rtbConversation.Focus(); 
    rtbConversation.SelectionStart = rtbConversation.Text.Length - 1; 
    rtbConversation.ScrollToCaret(); 
    rtbSendMessage.Focus(); 
} 

回答

3

由於WPF使用System.Windows.Controls代替System.Windows.Forms,我們必須考慮以下

1. System.Windows.Controls.RichTextBox不具有財產Text將其值設置,我們可以將其值設置創建一個新類的TextRange由於控制取決於TextPointer這可以使用被限定TextRange

string _Text = "" 
new TextRange(rtbConversation.Document.ContentStart, rtbConversation.Document.ContentEnd).Text = _Text; 

2. System.Windows.Controls.RichTextBox中的選擇不取決於int,但它們被TextPointer持有。所以,我們不能說

rtbConversation.SelectionStart = rtbConversation.Text.Length - 1; 

,但我們可以說

int TextLength = new TextRange(rtbConversation.Document.ContentStart, rtbConversation.Document.ContentEnd).Text.Length; 
TextPointer tr = rtbConversation.Document.ContentStart.GetPositionAtOffset(TextLength - 1, LogicalDirection.Forward); 
rtbConversation.Selection.Select(tr, tr); 

這將做同樣的rtbConversation.SelectionStart = rtbConversation.Text.Length - 1;

備註:您可以隨時檢索選擇的開始WPF使用RichTextBox.Selection.Start
通知RichTextBox.Selection.Start輸出一類名稱TextPointer但不名int


3的結構最後,System.Windows.Controls.RichTextBox沒有一個定義ScrollToCaret();。在這種情況下,我們可以使用關於你的控制rtbConversation

rtbConversation.ScrollToEnd(); 
rtbConversation.ScrollToHome(); 
rtbConversation.ScrollToHorizontalOffset(double offset); 
rtbConversation.ScrollToVerticalOffset(double offset); 

所以,你的虛空應該是這樣的WPF

public void AppendConversation(string str) 
{ 
    conversation.Append(str) // Sorry, I was unable to detect the type of 'conversation' 
    #region rtbConversation.Text = conversation.ToString(); 
    // rtbConversation.Text = conversation.ToString(); 
    new TextRange(rtbConversation.Document.ContentStart, rtbConversation.Document.ContentEnd).Text = conversation.ToString(); 
    // rtbConversation.Text = conversation.ToString(); 
    #endregion 
    #region rtbConversation.Focus(); 
    // rtbConversation.Focus(); 
    rtbConversation.Focus(); 
    // rtbConversation.Focus(); 
    #endregion 
    #region rtbConversation.SelectionStart = rtbConversation.Text.Length - 1; 
    // rtbConversation.SelectionStart = rtbConversation.Text.Length - 1; 
    int TextLength = new TextRange(rtbConversation.Document.ContentStart, rtbConversation.Document.ContentEnd).Text.Length; 
    TextPointer tr = rtbConversation.Document.ContentStart.GetPositionAtOffset(TextLength - 1, LogicalDirection.Forward); 
    rtbConversation.Selection.Select(tr, tr); 
    // rtbConversation.SelectionStart = rtbConversation.Text.Length - 1; 
    #endregion 
    #region rtbConversation.ScrollToCaret(); 
    // rtbConversation.ScrollToCaret(); 
    rtbConversation.ScrollToEnd(); 
    // rtbConversation.ScrollToCaret(); 
    #endregion 
    #region rtbSendMessage.Focus(); 
    //rtbSendMessage.Focus(); 
    rtbSendMessage.Focus(); 
    //rtbSendMessage.Focus(); 
    #endregion 
} 

下列空間之一謝謝,
我希望你覺得這有幫助:)

+1

非常感謝! – ggsmartboy

+0

@ggsmartboy完全沒有問題。我很高興能夠提供幫助。 [請注意,您可以將帖子標記爲表示您已解決問題的答案](http://i.stack.imgur.com/uqJeW.png)。有一個美好的一天:) –

+1

再次感謝。 。 。祝你有個美好的一天。 。 。 – ggsmartboy