我會使用RichTextBox控件輸出數據。
在這個例子中,我完全沒有問題。
public partial class MainWindow : Window
{
private int counter = 0;
public MainWindow()
{
InitializeComponent();
Loaded+=OnLoaded;
}
private void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
{
for (int i = 0; i < 200; i++)
{
AddLine(counter++ + ": Initial data");
}
var timer = new DispatcherTimer();
timer.Interval = new TimeSpan(0, 0, 0, 0, 200);
timer.Tick += TimerOnTick;
timer.IsEnabled = true;
}
private void TimerOnTick(object sender, EventArgs eventArgs)
{
AddLine(counter++ + ": Random text");
}
public void AddLine(string text)
{
outputBox.AppendText(text);
outputBox.AppendText("\u2028"); // Linebreak, not paragraph break
outputBox.ScrollToEnd();
}
}
和XAML
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<RichTextBox x:Name="outputBox"
VerticalScrollBarVisibility="Visible"
HorizontalScrollBarVisibility="Visible"
IsReadOnly="True">
<FlowDocument/>
</RichTextBox>
</Grid>
</Window>
而且它可能很容易把它擴大。如果滾動位置不在最後,請不要滾動到最後,以便在文本框仍在更新時查看舊數據。
我正在使用MVVM模式和DataBinding,所以我的ViewModel獲取數據沒有辦法直接調用RichTextBox的AppendText方法。 但我會盡力解決這個問題。也許我可以使用DependencyProperty。 – Bluuu
嗯..如何在您的ViewModel中創建一個視圖監聽的事件,並從那裏調用AddLine()?如果沒有,你可以嘗試綁定到文檔,但我不完全確定什麼是以這種方式添加文本行的最佳方式。 (注意,綁定到Document很難) – AkselK
我使用了RichTextBox方法並實現了我自己的寫入器,該寫入器寫入FlowDocument。表現相當不錯。 很抱歉等待。我在假期休息了一段時間。 – Bluuu