我想要一个元素或一个控件来显示一个现成的,色彩鲜艳,可选择的,可滚动的文本,这是我的应用程序中的一种日志。我不知道是fixed document or flow document。
RichText可能是看似的选择,但最初支持编辑。我相信即使我设置readonly = true,内置编辑支持也需要一些资源。我想找一个重量更轻的。
也许FlowDocumentScrollViewer?它是只读的,默认情况下不显示工具栏。即使我打开IsToolBarVisible,工具栏也只是一个小控件。
The Block进入我的脑海。虽然它可能是最轻的控件,但我无法在没有其他努力的情况下选择其中的文本。
也许存在其他选择?你有什么看法?
答案 0 :(得分: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
答案 1 :(得分:0)
我不确定您认为正在采用哪种类型的资源"编辑"功能。选择文本的能力与编辑文本的能力密切相关。
如果你想要一个,你必须忍受另一个。 Luckilly,将IsReadOnly设置为" True"将满足您的功能要求。
如果您的应用程序计算机能够使用WPF运行.NET Framework,我不会担心编辑简单文本的能力可能(或可能不会)消耗的少量资源。