哪个控件在WPF中显示只读彩色文本?

时间:2012-07-13 01:51:49

标签: wpf wpf-controls

我想要一个元素或一个控件来显示一个现成的,色彩鲜艳,可选择的,可滚动的文本,这是我的应用程序中的一种日志。我不知道是fixed document or flow document

RichText可能是看似的选择,但最初支持编辑。我相信即使我设置readonly = true,内置编辑支持也需要一些资源。我想找一个重量更轻的。

也许FlowDocumentScrollViewer?它是只读的,默认情况下不显示工具栏。即使我打开IsToolBarVisible,工具栏也只是一个小控件。

The Block进入我的脑海。虽然它可能是最轻的控件,但我无法在没有其他努力的情况下选择其中的文本。

也许存在其他选择?你有什么看法?

2 个答案:

答案 0 :(得分:1)

我做了一个实验来帮助我在FlowDocumentScrollViewer,RichTextBox和TextBlock中选择我喜欢的控件。我发现FlowDocumentScrollViewer是最好的。

在每个窗口中,我有两个相同类型的控件:FlowDocumentScrollViewer,RichTextBox或TextBlock。我制作了三个这样的窗口,因为MainWindow有三个按钮。 enter image description here

private void prepareButton_Click(object sender, RoutedEventArgs e)
{

    document1 = HelperClass.GetDocument();

    document2 = HelperClass.GetDocument();
}

private void loadButton_Click_1(object sender, RoutedEventArgs e)
{
    Stopwatch watch = new Stopwatch();
    watch.Start();

    viewer1.Document = document1;
    viewer2.Document = document2;

    this.Dispatcher.BeginInvoke(DispatcherPriority.Loaded,
                  new Action(() =>
                  {
                      watch.Stop();
                      MessageBox.Show("Took " + watch.ElapsedMilliseconds + " ms",Title);
                  }));
}

其中viewer1和viewer2可以是FlowDocumentScrollViewer或RichTextBox。 对于TextBlock,我使用

private void prepareButton_Click(object sender, RoutedEventArgs e)
{

    inlines1 = HelperClass.GetInlines();

    inlines2 = HelperClass.GetInlines();
}

private void loadButton_Click_1(object sender, RoutedEventArgs e)
{
    Stopwatch watch = new Stopwatch();
    watch.Start();

    viewer1.Inlines.AddRange(inlines1);
    viewer2.Inlines.AddRange(inlines2);


    this.Dispatcher.BeginInvoke(DispatcherPriority.Loaded,
                  new Action(() =>
                  {
                      watch.Stop();
                      MessageBox.Show("Took " + watch.ElapsedMilliseconds + " ms");
                  }));
}

测试表明FlowDocumentScrollViewer在三者中表现最佳:

             FlowDocumentScrollViewer   RichTextBox    TextBlock
Working set      65400                    67252          82124
Loading Time      1045                    1414           45119

答案 1 :(得分:0)

我不确定您认为正在采用哪种类型的资源"编辑"功能。选择文本的能力与编辑文本的能力密切相关。

如果你想要一个,你必须忍受另一个。 Luckilly,将IsReadOnly设置为" True"将满足您的功能要求。

如果您的应用程序计算机能够使用WPF运行.NET Framework,我不会担心编辑简单文本的能力可能(或可能不会)消耗的少量资源。