1

我想要一个元素或控件显示现成的、彩色的、可选择的、可滚动的文本,这是我的应用程序中的一种日志。不知道是固定文件还是流文件

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

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

块出现在我的脑海中。虽然它可能是最轻的控件,但我无法不费力气地选择其中的文本。

也许存在其他选择?你有什么意见?

4

2 回答 2

1

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

在每个窗口中,我有两个相同类型的控件:FlowDocumentScrollViewer、RichTextBox 或 TextBlock。我做了三个这样的窗口,因为 MainWindow 有三个按钮。 在此处输入图像描述

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
于 2012-07-13T06:20:22.127 回答
0

我不确定您认为“编辑”功能占用了哪些类型的资源。选择文本的能力与编辑文本的能力齐头并进。

如果你想要一个,你就必须忍受另一个。幸运的是,将 IsReadOnly 设置为“True”将满足您的功能要求。

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

于 2012-07-13T02:10:01.340 回答