我需要在WPF中真正有效的控制,它可以描绘多达数千个彩色文本。
此类控制职责与Visual Studio输出类似。 此外,它必须非常有效,因为我应该描绘成千上万的消息。
任何时候出现新消息,它应该自动滚动到按钮
我使用了ListBox:
<ListBox Name="ListBoxMessages" ItemsSource="{Binding ObservableMessages}" VerticalAlignment="Stretch" VirtualizingStackPanel.IsVirtualizing="True" >
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Info}" Foreground="{Binding Foreground}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
ObservableMessages的类型为:ObservableCollection包含信息和颜色的消息。
这很好但是当我尝试在添加到集合的每个新项目上添加自动滚动按钮时,它实际上是非常低效的。
Thread.Sleep(5)有点帮助,但我不确定是否要使用这种解决方法。
到目前为止我调查了WPF RichTextBox,但它似乎效率很低: - 我尝试了许多与RichText相关的解决方案,但它没有达到我的期望。 - 另一个解决方案是创建我自己的控件
你能推荐任何解决方案吗?
可以从不同的线程中快速填充Observable集合,如下所示:
public void ProcessNotificationMessage(Message message)
{
Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => ObservableMessages.Add(message)));
// Thread.Sleep(5);
}