2012-04-25 51 views
13

我有幾個只讀的RichTextBox用於記錄輸出。由於它們是隻讀的,因此當文本更新時它們似乎不會自動滾動。我可以使用TextChanged事件強制一個滾動結束,但是有沒有簡單的方法來設置屬性或XAML中的東西,使滾動發生像正常?當我添加一個新行時,如何使RichTextBox滾動到最後?

+0

可能重複的[在底部\ Verticall滾動的RichTextBox [WPF \]](http://stackoverflow.com/questions/4256129/verticall-scroll-richtextbox-on-the-bottom-wpf) – 2015-05-19 23:08:06

回答

16

我已經搜索了您的問題,發現this後。 在「編程RichTextBox」一節中,作者描述瞭如何獲得您期望的行爲。

請檢查並讓我知道它是否有任何用處。


我試圖重現你的問題,並與下面的解決方案

<Window x:Class="CheckRichTextBox.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="170" Width="300"> 
    <StackPanel> 
     <RichTextBox Height="100" Name="richTextBox1" IsReadOnly="True" VerticalScrollBarVisibility="Visible"/> 
     <Button Name="btnAdd" Content="Click me to add text" VerticalAlignment="Bottom" Click="BtnAddClick" /> 
    </StackPanel> 
</Window> 
想出了

爲同後面的代碼如下:

using System.Windows; 

namespace CheckRichTextBox 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void BtnAddClick(object sender, RoutedEventArgs e) 
     { 
      richTextBox1.AppendText("You had Clicked the button for adding text\n"); 
      richTextBox1.ScrollToEnd(); 
     } 
    } 
} 

這解決了自動滾屏的問題,請檢查它,並讓我知道它是否有任何幫助。

+3

它使滾動條可見,但在以編程方式添加文本時它仍然不滾動到文檔的末尾。看起來像我可能被卡住了TextChanged事件。 – Merad 2012-04-25 20:54:18

+1

我希望編輯後的解決方案可以幫助您解決問題 – Pank 2012-04-26 08:31:36

+1

@Merad您如何使用TextChanged事件做到這一點? – 2013-03-16 07:52:51

13

我用Interactivity觸發器和一個非常簡單的動作解決了這個問題。

的操作是這樣的:

public class ScrollToBottomAction : TriggerAction<RichTextBox> 
{ 
    protected override void Invoke(object parameter) 
    { 
     AssociatedObject.ScrollToEnd(); 
    } 
} 

然後在我的XAML我有這樣的:

<RichTextBox IsReadOnly="True" VerticalScrollBarVisibility="Auto"> 
    <i:Interaction.Triggers> 
      <i:EventTrigger EventName="TextChanged"> 
       <interactivity:ScrollToBottomAction/> 
      </i:EventTrigger> 
    </i:Interaction.Triggers> 
</RichTextBox> 
+0

偉大的解決方案! – 2015-11-27 10:54:22

+0

我無法得到這個工作,因爲與舊版混合版本有關。並且我嘗試了在http://stackoverflow.com/questions/32024034/the-type-from-assembly-is-built-with-an-older-version-of-blend-sdk-and-is中提出的建議沒有運氣的不是蘇。有什麼想法嗎? – Snoopy 2016-11-16 19:56:10

-1
RichTextBox.AppendText("String") 
RichTextBox.ScrollToCaret() 

當我加入RichTextBox.text,ScrollToCaret()不工作。

RichTextBox.text = RichTextBox.text + "String" 
RichTextBox.ScrollToCaret() 
+0

'ScrollToCaret'用於WinForms'RichTextBox',而不是WPF。這裏有一個問題:[新的數據寫入時,Rich Text框滾動到底部](http://stackoverflow.com/questions/9416608/rich-text-box-scroll-to-the-bottom-當新數據,是寫入到它) – 2015-05-14 01:07:05

相關問題