C#-WPF初学
1.新建一个WPF的应用;

2.拖拽控件并布局好:
【小技巧】选中控件,点击”回形针“即可让该控件跟随窗口自动调整大小;

3.编写代码:
主程序代码如下:

namespace WpfApp1
{
delegate void ShowMsgDelegate(ref TextBox textbox1, string msg);//定义委托类型
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
ShowMsgDelegate showMsgDelegate = null;//定义委托变量
public MainWindow()
{
InitializeComponent();
TextBox1.VerticalScrollBarVisibility = ScrollBarVisibility.Visible;
this.MyButton1.Click += ButtonClicked;//button1是手动代码挂接事件,Button2是IDE双击自动挂接,效果相同 showMsgDelegate += ShowMsg;//关联委托
} LogSave logSave1 = new LogSave();
private void ButtonClicked(object sender, RoutedEventArgs e)
{
if (sender == this.MyButton1)
{
string msg1 = $"{MyButton1.Name}按钮被按下"+"\r\n";
this.MyTextBox.Text = msg1;
logSave1.AddMsg(msg1);
showMsgDelegate.Invoke(ref TextBox1, msg1);
}
else if (sender == this.MyButton2)
{
string msg1 = $"{MyButton2.Name}按钮被按下" + "\r\n";
this.MyTextBox.Text = msg1;
logSave1.AddMsg(msg1);
showMsgDelegate.Invoke(ref TextBox1, msg1);
}
else if (sender == this.MyButton3)
{
TextBox1.Clear();
}
}
public void ShowMsg(ref TextBox textbox1, string msg)
{
string timestring = DateTime.Now.ToString();
msg = timestring + "|" + msg;
textbox1.Text=textbox1.Text.Insert(0, msg);
} }
}
log记录的代码:

namespace WpfApp1
{
class LogSave
{
FileStream LogFile;
string str_date; //log文件日期
List<string> str_list = new List<string>();
public void AddMsg(string MsgStr)
{
byte[] byData; if (LogFile == null || 0 != string.Compare(str_date, DateTime.Now.ToString("yyyy-MM-dd")))
{
String str;
str = Path.GetFullPath("..") + "\\log\\";
if (!Directory.Exists(str))
{
//文件夹不存在则创建
Directory.CreateDirectory(str);
}
try
{
if (LogFile != null)
{
LogFile.Close();
LogFile = null;
}
str += DateTime.Now.ToString("yyyy-MM-dd") + ".log";
if (!File.Exists(str))
{
LogFile = new FileStream(str, FileMode.Create);
}
else
{
LogFile = new FileStream(str, FileMode.Open); }
str_date = DateTime.Now.ToString("yyyy-MM-dd");
}
catch (Exception)
{
return;
}
}
if (LogFile != null)
{
string StrTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
MsgStr = $"<{StrTime}>>{MsgStr}\n";//加入log //MsgStr = MsgStr + Environment.NewLine;//分行
byData = System.Text.Encoding.Default.GetBytes(MsgStr);//设置格式
if (LogFile.CanWrite) LogFile.Write(byData, 0, byData.Length);
str_list.Add(MsgStr);
LogFile.Seek(0, SeekOrigin.End);//在第一行打印
}
}
}
}
项目:

最终运行效果:
【小技巧】让最新的log消息显示在首行;

C#-WPF初学的更多相关文章
- WPF初学(一)——布局【良好界面的基础】
由Winform转到WPF的一部分人,很可能忽略掉布局,习惯性的使用固定定位.然而,没有良好的布局,后面界面控件画的再好看,花哨,都不过是鲜花插在牛粪上,很可能始终都是一坨??(呵呵). 闲话少说,首 ...
- WPF 初学VisifireChart
visifire今天登陆他们官网的时候,发现好像是挂掉了,不知道是不再运营了,还是单纯服务器出了问题. VisifireChart的效果不炫,但是对于一些项目,感觉够用的,所以,今天大概看了几篇博客, ...
- WinForm数字小键盘/WPF数字小键盘
模仿原本的WinForm触摸屏小键盘制作WPF触摸屏小键盘 原WinForm触摸屏小键盘样式(WinForm采用Krypton系列控件)如下图: Designer代码如下: // // BtnNum1 ...
- WPF datagrid 初学
<Window x:Class="WpfDemo.WinDataGrid" xmlns="http://schemas.microsoft.com/winfx/20 ...
- [初学WPF]控件大小自适应
想在Win上自己写点小工具用,GUI自然是免不了的,于是决定学一学WPF,直接拖控件是很方便啊.控件拖出来以后发现运行时改变窗口大小控件不会重绘,搜索了一下发现了解决办法:使用Viewbox控件. V ...
- (初学)wpf仿QQ界面-整体布局
跟一个小学弟一起学习wpf,小学弟是刚初中毕业,对编程刚刚接触,我挺怕自己带的不好,影响小学弟以后在编程方向的学习兴趣.我承认自己水平不高,但是在努力去学习新知识!一起加油吧!在此以博客,记录学习进度 ...
- WPF 我的初学必备技能
0.控件 0.1.内容控件(Content Controls) 0.2.条目控件(Items Controls) 0.3.文本控件(Text Controls) 0.4.范围控件(Range Cont ...
- [开发笔记]-初学WPF之自学笔记
一:动态加载背景图片 代码: 在窗体加载时,Window_Loaded 方法中: #region 测试动态加载背景图片 /* 1.图片右键 属性: 复制到输出目录:选择“如果较新则复制” 生成操作选择 ...
- WPF 变量绑定实现
最近初学WPF,遇到如控件的内容是动态生成的.这时候就需要变量绑定. 简单写下变量绑定的步骤. 如下面的 例子,TextBlock 的内容是动态的,绑定变量StuName. <TextBlock ...
- WPF之Binding初探
初学wpf,经常被Binding搞晕,以下记录写Binding的基础. 首先,盗用张图.这图形象的说明了Binding的机理. 对于Binding,意思是数据绑定,基本用法是: 1.在xmal中使用 ...
随机推荐
- 5GC 关键技术之 SBA(基于服务的软件架构)
目录 文章目录 目录 前文列表 5GC 的关键技术 SBA(基于服务的软件架构) 微服务架构 NF 的模块化 NF Service 的服务化 前文列表 <简述移动通信网络的演进之路> &l ...
- 4G EPS 中的小区搜索
目录 文章目录 目录 前文列表 小区搜索(Cell Search)流程 PSS(主同步信号)与 SSS(辅同步信号) DL-RS(下行参考信号) PBCH(物理广播信道) PDSCH(物理下行共享信道 ...
- angular自定义属性指令
在angular中有三种类型的指令: 组件–拥有模板的指令: 结构性指令–通过添加和移除DOM元素改变DOM布局的指令; 属性型指令–改变元素.组件或其他指令的外观和行为的指令: 组件是这三种指令中最 ...
- 基于Python的性能分析
1.什么是性能分析 字面意思就是对程序的性能,从用户角度出发就是运行的速度,占用的内存. 通过对以上情况的分析,来决定程序的哪部份能被优化.提高程序的速度以及内存的使用效率. 首先我们要弄清楚造成时间 ...
- linux文件的三个时间,修改文件时间为任意时间
目录 一.文件的三个时间 二.修改文件的三种时间为任意时间 一.文件的三个时间 当我们在linux中创建了文件或文件夹,文件/文件夹就有了时间属性,而且linux中的文件具有三个时间,可以通过stat ...
- 牛逼:一张900w的数据表,17s执行的SQL优化到300ms?
转载自 https://mp.weixin.qq.com/s/ru_B1aI0YrpXeSl-J01sHQ
- WPF 制作高性能的透明背景异形窗口(使用 WindowChrome 而不要使用 AllowsTransparency=True)
在 WPF 中,如果想做一个背景透明的异形窗口,基本上都要设置 WindowStyle="None".AllowsTransparency="True" 这两个 ...
- switch case 跳转表
一.事情来源 事情来源是一段奇怪的代码,代码如下 int x = 1000; switch (x) { case 1000: { NSLog(@"%d", 1); } case 2 ...
- SpringBoot系列(一)简介。
概述: Spring Boot 可以简化spring的开发,可以快速创建独立的.产品级的应用程序. 特征: 快速创建独立的 Spring 应用程序 直接嵌入了Tomcat.Jetty或Undertow ...
- 《Android开发卷——自定义日期选择器(一)》
(小米手机) (中兴手机) 在实际开发中,Google官方提供的时间选择器API已经不能满足于我们的需要了,所以很多公司都是采用自定义的形式来实现日期选择器. 这个例子很简单,定义三个NumberPi ...