wpf TextBox日志文本框
使用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 TextBox日志文本框相关推荐
- WPF中的文本框改变事件
WPF中的文本框改变事件 开发工具与关键技术:Visual Studio 2017.WPF 撰写时间:2019年8月16日 下面我们做一个文本框的改变事件,在一个文本框输入数值,另一个文本框会发生改变 ...
- RichView TextBox Items 文本框
RichView TextBox Items 文本框 RichView的文本框(TextBox)作为文档的一个Item,运用于是旁注的简化标注. 该项目插入的位置通常可见的文本但是,它显示时与背景可以 ...
- TextBox 单行文本框,多行文本框
把TextBox的TextMode属性设置为MultiLine就变成了多行文本了 SingleLine - 默认.表示单行输入模式. MultiLine - 表示多行输入模式. Password - ...
- WPF中给文本框TextBox设置提示文字
<TextBlock Text="模板名称" Margin="20" ></TextBlock><TextBox x:Name=& ...
- WPF 禁止在文本框中输入数字
private void textBox1_PreviewTextInput(object sender, TextCompositionEventArgs e){e.Handled = System ...
- 2、Web 窗体的基本控件——文本框控件(TextBox)
2.Web 窗体的基本控件--文本框控件(TextBox) 文本框控件(TextBox) 前端 <%@ Page Language="C#" AutoEventWireup= ...
- java pdf表单域实现_Java 创建PDF表单域 - 文本框、复选框、列表框、组合框、按钮等...
表单域包括文本框.复选框.列表框.组合框.按钮和签名域等,主要用于收集用户填写或选择的数据.这篇文章将介绍如何在Java应用程序中给PDF文档添加表单域. 导入jar文件 本文所使用的PDF类库是Fr ...
- WPF清空textbox文本框
1. 第一步:将每个窗体当中的网格布局控件--Grid命名 2. 3. 4. 5. 第二步:在UI层,添加清空的类,以及判空的类 6. 7. 第三步:在两个类里面添加命名空间 8. 9. 这两个引用是 ...
- WPF 文本框添加水印效果
有的时候我们需要为我们的WPF文本框TextBox控件添加一个显示水印的效果来增强用户体验,比如登陆的时候提示输入用户名,输入密码等情形.如下图所示: 这个时候我们除了可以修改TextBox控件的控件 ...
最新文章
- 2017 ACM ICPC Asia Shenyang Regional Contest 题解(10 / 13)【每日亿题2 / 16】
- jSearch(聚搜) v1.1.0 发布,全新视觉体验
- 2016全球数据新闻奖(DJA)颁布, 12个获奖作品全剖析
- SecurityManager安全管理器
- [html] 在主框架下引入的iframe,如果检测这个iframe是否能打开,如果打不开则跳到404页面
- javascripts-for循环-while循环-标签的选择与操作
- 一加6手机突然没信号没服务器,如何从技术上解决手机信号问题?一加6替你想到了...
- 两年不工作、月花200块,90后躺平学大师已有了一批「信徒」
- C++ linux系统api
- Android大图片裁剪之手机拍照和从相册中选择注意点
- 【日常小结】VB.NET下操作Access数据库
- BlazeDS 整合 Flex
- H3C基础配置命令(一)
- 51 Nod 一维战舰
- 手机扫描二维码登录原理
- QT5单元测试(按键测试)
- 从趋势、风格和文案三方面,分析短视频封面这样设计更吸引人。
- 机器学习3决策树算法模型
- 单单训练营 第四期 第一课 做自己的CEO
- Spring05:面向切面编程