2015-09-05 67 views
3

我正在嘗試創建一個像IRC一樣的聊天窗口,其中內容從下到上顯示,就像任何創建的聊天窗口一樣。來自底部的WPF RichTextBox文本

這是我的XAML,沒有什麼特別之處它

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:ee="http://schemas.microsoft.com/expression/2010/effects" xmlns:ed="http://schemas.microsoft.com/expression/2010/drawing" x:Class="TestChat.Chat" 
    Title="Chat" Height="700" Width="400" WindowStyle="ThreeDBorderWindow" ResizeMode="CanMinimize"> 

    <Grid> 
     <RichTextBox x:Name="txtChat" HorizontalAlignment="Left" Height="644" Margin="0,10,0,0" VerticalAlignment="Top" Width="388" VerticalScrollBarVisibility="Auto"> 
      <FlowDocument /> 
     </RichTextBox> 
    </Grid> 
</Window> 

,我有一個BackgroundWorker添加文本到它

private void SendWorkerComplete(object s, ProgressChangedEventArgs args) 
{ 
    txtChat.AppendText(args.UserState.ToString()); 
    txtChat.ScrollToEnd(); 
} 

private void SendWorker_DoWork(object sender, DoWorkEventArgs e) 
{ 
    SendWorker.ReportProgress(0, (string)e.Argument); 
} 

的VerticalContentAlignment屬性設置爲底部不會呈現內容這樣,這怎麼可能呢?有沒有財產或它必須以編程方式完成?

+0

這是一個類似的要求。不完全按照您指定的,但它可能適用於您:http://stackoverflow.com/questions/10308475/how-can-i-make-a-richtextbox-scroll-to-the-end-when-i- add-a-new-line – JamieMeyer

+0

只能滾動到底部,但如果richtextbox是空的,沒有用於重現此行爲,我想我可以添加一堆空行並滾動結束,然後再將輸出附加到它以重現這,但我正在尋找一個更優雅的方式來做到這一點,謝謝 – FuuRe

+0

你能告訴我們你使用的xaml嗎? – StillLearnin

回答

-1

你設置保證金左到545雲豐富的文本框窗外改變你的代碼的東西像這表明你對窗口底部的控制:

<RichTextBox x:Name="txtChat" HorizontalAlignment="Stretch" Height="42" VerticalAlignment="Bottom" Width="auto" VerticalScrollBarVisibility="Auto" Background="Yellow"> 
     <FlowDocument /> 
</RichTextBox> 
+0

這並不能解決他的問題。 – StillLearnin

0

爲什麼用一個RichTextBox麻煩?只需使用常規的TextBox。

<Grid> 
    <TextBox x:Name="txtChat" VerticalScrollBarVisibility="Auto" Margin="10" Text="Hello" VerticalContentAlignment="Bottom" /> 
</Grid> 
+0

這是一個聊天,所以它需要有表情符號,不同的字體大小,樣式,顏色......你得到想法 – FuuRe

+1

@FuuRe啊!我懂了。我認爲你只是使用純文本界面,因爲如果我這樣做,並想處理表情符號花式等,我絕對不會使用richtextbox。我首先建立一個包含所有關聯屬性(發送者,消息等)的消息類,然後構建一個定製的xaml控件來表示消息對象。每次消息到達時,創建一個新的消息對象並將其添加到集合中。將列表視圖綁定到該集合,其中列表項模板是您的自定義xaml控件。 – StillLearnin