为了账号安全,请及时绑定邮箱和手机立即绑定

使用WPF实现日志查看器

使用WPF实现日志查看器

C#
倚天杖 2019-08-24 15:31:08
使用WPF实现日志查看器我寻求有关使用WPF实现控制台日志查看器的最佳方法的建议。它应符合以下标准:快速滚动100.000+行某些条目(如stacktraces)应该是可折叠的长项包裹列表可以按不同的标准(搜索,标签等)进行过滤在最后,它应该在添加新项目时继续滚动线元素可以包含某种添加格式,如超链接和出现计数器总的来说,我有一些想法,如FireBug和Chrome的控制台窗口。我玩这个但是我没有取得多大进展,因为...... - 数据网格无法处理不同的项目高度 - 滚动位置仅在释放滚动条后更新(这是完全不可接受的)。我很确定,我需要某种形式的虚拟化,并希望遵循MVVM模式。欢迎任何帮助或指示。
查看完整描述

2 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

HighCore答案是完美的,但我想它缺少这个要求:“当最后,它应该在添加新项目时继续滚动”。

根据这个答案,你可以这样做:

在主ScrollViewer(DockPanel内)中,添加事件:

<ScrollViewer CanContentScroll="True" ScrollChanged="ScrollViewer_ScrollChanged">

转换事件源以执行自动滚动:

    private bool AutoScroll = true;
    private void ScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
    {
        // User scroll event : set or unset autoscroll mode
        if (e.ExtentHeightChange == 0)
        {   // Content unchanged : user scroll event
            if ((e.Source as ScrollViewer).VerticalOffset == (e.Source as ScrollViewer).ScrollableHeight)
            {   // Scroll bar is in bottom
                // Set autoscroll mode
                AutoScroll = true;
            }
            else
            {   // Scroll bar isn't in bottom
                // Unset autoscroll mode
                AutoScroll = false;
            }
        }

        // Content scroll event : autoscroll eventually
        if (AutoScroll && e.ExtentHeightChange != 0)
        {   // Content changed and autoscroll mode set
            // Autoscroll
            (e.Source as ScrollViewer).ScrollToVerticalOffset((e.Source as ScrollViewer).ExtentHeight);
        }
    }}


查看完整回答
反对 回复 2019-08-24
  • 2 回答
  • 0 关注
  • 1692 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信