2012-12-18 66 views
4

我想添加一個輸出監視器到我的WPF應用程序。 只讀監視器,類似於visual studio中的調試輸出。是否有像Visual Studio調試輸出WPF輸出監視器控制

是否有一個WPF控件已經提供了我需要的功能? 或者有沒有一種方法可以重用Visual Studio中的控件?

目前我正在使用由StringBuilder支持的標準TextBox。更新轉到StringBuilder,而TextBox每200毫秒獲取最新的字符串。

我的問題是,隨着輸出字符串變長,這變得非常慢。

回答

2

我會使用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> 

而且它可能很容易把它擴大。如果滾動位置不在最後,請不要滾動到最後,以便在文本框仍在更新時查看舊數據。

+0

我正在使用MVVM模式和DataBinding,所以我的ViewModel獲取數據沒有辦法直接調用RichTextBox的AppendText方法。 但我會盡力解決這個問題。也許我可以使用DependencyProperty。 – Bluuu

+0

嗯..如何在您的ViewModel中創建一個視圖監聽的事件,並從那裏調用AddLine()?如果沒有,你可以嘗試綁定到文檔,但我不完全確定什麼是以這種方式添加文本行的最佳方式。 (注意,綁定到Document很難) – AkselK

+0

我使用了RichTextBox方法並實現了我自己的寫入器,該寫入器寫入FlowDocument。表現相當不錯。 很抱歉等待。我在假期休息了一段時間。 – Bluuu

相關問題