2012-04-25 38 views
13

Tôi có một số chỉ đọc RichTextBox được sử dụng để đăng xuất đầu ra. Vì chúng chỉ đọc, chúng dường như không tự động cuộn khi văn bản được cập nhật. Tôi có thể sử dụng sự kiện TextChanged để buộc một cuộn để kết thúc, nhưng không chỉ đơn giản là một cách để thiết lập một tài sản hoặc một cái gì đó trong XAML để cuộn xảy ra như bình thường?Làm cách nào để tạo một RichTextBox cuộn đến cuối khi tôi thêm một dòng mới?

+0

thể trùng lặp của [Verticall cuộn richtextbox trên dưới cùng \ [WPF \]] (http://stackoverflow.com/questions/4256129/verticall-scroll-richtextbox-on-the-bottom-wpf) –

Trả lời

16

Tôi đã googled cho vấn đề của bạn và tìm thấy this bài đăng. Trong phần "Lập trình RichTextBox" tác giả đã mô tả về nhận được hành vi những gì bạn đã mong đợi.

Vui lòng kiểm tra và cho tôi biết nếu có bất kỳ việc sử dụng nào.


tôi đã cố gắng để tái tạo vấn đề của bạn và đưa ra các giải pháp sau đây

<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> 

Các mã sau cho cùng là như sau:

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(); 
     } 
    } 
} 

này giải quyết vấn đề của autoscroll , xin vui lòng kiểm tra nó và cho tôi biết nếu nó là của bất kỳ sự giúp đỡ.

+3

Nó làm cho thanh cuộn hiển thị, nhưng nó vẫn không cuộn đến cuối tài liệu khi văn bản được thêm vào theo chương trình. Có vẻ như tôi có thể bị mắc kẹt với sự kiện TextChanged. – Merad

+1

Tôi hy vọng giải pháp đã chỉnh sửa có thể giúp bạn thoát khỏi – Pank

+1

@Merad Bạn làm như thế nào với sự kiện TextChanged? –

13

Tôi giải quyết vấn đề này bằng cách sử dụng kích hoạt Interactivity và hành động rất đơn giản.

Hành động trông như thế này:

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

Sau đó, trong XAML của tôi, tôi có điều này:

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

Giải pháp tuyệt vời! –

+0

Tôi không thể làm điều này để làm việc vì một cái gì đó để làm với phiên bản pha trộn cũ. Và tôi đã thử những gì được đề xuất trong http://stackoverflow.com/questions/32024034/the-type-from-assembly-is-built-with-an-older-version-of-blend-sdk-and-is -not-su không may mắn. Có suy nghĩ gì không? – Snoopy

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

Khi tôi đã thêm vào RichTextBox.text, ScrollToCaret() không hoạt động .

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

'ScrollToCaret' là cho một WinForms' RichTextBox', không phải là một WPF một. Có một câu hỏi về điều đó ở đây: [Hộp văn bản có định dạng cuộn xuống cuối khi dữ liệu mới được ghi vào nó] (http://stackoverflow.com/questions/9416608/rich-text-box-scroll-to-the-bottom- khi mới-dữ liệu-được viết-to-it) –

Các vấn đề liên quan