wpf TextBox日志文本框

原创 2015年07月06日 22:52:19

使用WPF的TextBox显示自定义日志
TextBox中显示各种日志,随滚动条的位置不同,日志显示需要有区别: 竖直滚动条在最下面时,最新日志添加到最末行,并显示最新日志;竖直滚动条不在最下面时,最新日志同样添加到最末行,但可视区域显示的日志始终不变化位置。

  • 滚动条在最底端
    这里写图片描述
    上下两张图,滚动条在最下方,最末行更新显示最新日志
    这里写图片描述

  • 滚动条不在最底端
    这里写图片描述
    上下两张图,滚动条在变化,但可视区域显示内容没有变化
    这里写图片描述

小二,上代码
1)MainWindow.xaml

<Window x:Class="LogText.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="日志文本框" Height="350" Width="200">
    <Grid>
        <TextBox Name="txtLog" AcceptsReturn="True" 
                 TextWrapping="Wrap" Foreground="Green"
                 Grid.Row="1" Grid.ColumnSpan="2"
                 VerticalScrollBarVisibility="Auto"
                 HorizontalScrollBarVisibility="Auto"/>
    </Grid>
</Window>

2)MainWindow.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace LogText
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            ThreadPool.QueueUserWorkItem(sender =>
            {
                while (true)
                {
                    this.txtLog.Dispatcher.BeginInvoke((Action)delegate
                    {
                        this.txtLog.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff\r\n"));
                        if (IsVerticalScrollBarAtBottom)
                        {
                            this.txtLog.ScrollToEnd();
                        }
                    });
                    Thread.Sleep(600);
                }
            });
        }

        /// <summary>
        /// 日志文本框滚动条是否在最下方
        /// true:文本框竖直滚动条在文本框最下面时,可以在文本框后追加日志
        /// false:当用户拖动文本框竖直滚动条,使其不在最下面时,即用户在查看旧日志,此时不添加新日志,
        /// </summary>
        public bool IsVerticalScrollBarAtBottom
        {
            get
            {
                bool atBottom = false;

                this.txtLog.Dispatcher.Invoke((Action)delegate
                {
                    //if (this.txtLog.VerticalScrollBarVisibility != ScrollBarVisibility.Visible)
                    //{
                    //    atBottom= true;
                    //    return;
                    //}
                    double dVer = this.txtLog.VerticalOffset;       //获取竖直滚动条滚动位置
                    double dViewport = this.txtLog.ViewportHeight;  //获取竖直可滚动内容高度
                    double dExtent = this.txtLog.ExtentHeight;      //获取可视区域的高度

                    if (dVer + dViewport >= dExtent)
                    {
                        atBottom = true;
                    }
                    else
                    {
                        atBottom = false;
                    }
                });

                return atBottom;
            }
        }

    }
}

WPF教程(十四)文本框

文本框本质上并不是一个控件,因为它不继承于控件类,然而在WPF中它使用情况和其他控件几乎一样,因此我们仍称它为控件。 文本框控件是WPF中最基础的控件之一,非常实用。它将文字显示到屏幕上,和标签控件...
  • seanbei
  • seanbei
  • 2016年10月13日 23:46
  • 1427

C# WPF 快速开发24操作日记+异常处理

系统日志管理:操作者,操作日期,操作描述。系统日志的复合搜索功能。 数据库表T_OperationLog Id,Operator,MakeDate,ActionDesc 接着在程序相应的地方操作...
  • wowkk
  • wowkk
  • 2013年06月09日 21:05
  • 3405

在WPF中,使用控制台输出日志信息

一、背景之前的项目中,使用Log4NET将日志信息输出到文本文件中。这种方法适用于常看以前的日志信息,却并不适用于实时查看日志。本以为Log4NET可以很方便地通过配置appender来解决这个问题。...
  • zzulishulei
  • zzulishulei
  • 2017年11月20日 21:42
  • 210

WPF Textbox的使用

Textbox可以通过配置以下属性来自动换行AcceptsReturn和TextWrapping TextBox捕获键盘事件KeyDown 后台代码 // 当同时按下Enter和Ctrl两...
  • chenbin520
  • chenbin520
  • 2011年07月13日 13:14
  • 10580

超好用的C# Log日志控件

  • 2016年01月30日 19:52
  • 66KB
  • 下载

WPF 日志文件

using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst...
  • feiyang094
  • feiyang094
  • 2015年03月31日 09:58
  • 647

WPF制作带圆角的文本框的两种方法

方法一   方法二 ...
  • tiana0
  • tiana0
  • 2015年10月08日 15:18
  • 4522

WPF--TextBox样式使用(文字居中、背景、圆角...)

1、XAML 2、Style
  • xiaodenanhai
  • xiaodenanhai
  • 2015年02月02日 16:05
  • 15923

WPF/Silverlight TextBox 实现CornerRadius圆角

  • soft2buy
  • soft2buy
  • 2011年04月20日 12:05
  • 3623

WPF中设置TEXTBOX为多行文本输入框

WPF中没有textarea的东西,不像在ASP.NET中设置textbox那样设置一个多行属性就可以变成文本域,虽然可以使用ricktextbox实现多行文本输入,但是richtextbox比较复杂...
  • banmuhuangci
  • banmuhuangci
  • 2010年05月24日 10:42
  • 11420
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:wpf TextBox日志文本框
举报原因:
原因补充:

(最多只允许输入30个字)