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中使用 ...
随机推荐
- C语言:如何让printf输出更加美化(用游戏英雄属性作例子)
#include <stdlib.h> /* run this program using the console pauser or add your own getch, system ...
- 在 JS 中使用 canvas 给图片添加文字水印
实现说明: 1.先通过 new Image() 载入图片: 2.图片加载成功后使用 drawImage() 将图片绘制到画布上: 3.最后使用 fillText() 函数绘制水印. 下面展示了详细用法 ...
- 在唯一密钥属性“name”设置为“XXX”时,无法添加类型为“add”的重复集合项
我是在调试时,更改了项目url出现的问题,没有改端口号,只是改了"/"后面的地址 这个是我是改哈端口号就好了,改了端口号就重新建立虚拟目录了. 感觉是因为端口号没变,但项目url变 ...
- ABP邮件发送
ABP Vnext发邮件要使用AbpMailKitModule的实现IEmailSender,要检查添加了Volo.Abp.MailKit,其dependon 要添加typeof() 它使用Sett ...
- springboot~封装依赖引用包jar还是pom,哪种更规范
将多个第三方包封装成一个项目后,如果你的目的是让其他开发人员可以直接引用这些依赖,一般来说有两种常见的方式: 打成JAR包:将封装好的项目编译打包成JAR文件,其他开发人员可以将这个JAR文件添加到他 ...
- exception EXC_RESOURCE - WAKEUPS 分析(二)
一.问题: 直播助手在使用ReplayKit2 Extension的过程中,ReplayKit2的Upload进程工作在后台模式,苹果对处于后台的进程进行了内存和CPU资源的限制. 对于内存: 每种E ...
- Xcode 自动化构建问题梳理
一.Xcode Xcode是mac OS平台上面开发的官方IDE,可以用来开发iOS应用和mac应用.随着iOS系统的升级,Xcode也会更新,而且是强制更新. Xcode每次版本更新稳定性很差,经常 ...
- C# .NET 国密 SM2 签名 默认USER ID
C# .NET 国密 SM2 签名 默认USER ID: 1234567812345678 string userId = "1234567812345678"; byte[] b ...
- 实时数据同步Inofity、sersync、lsyncd
数据备份方案 企业网站和应用都得有完全的数据备份方案确保数据不丢失,通常企业有如下的数据备份方案 定时任务定期备份 需要周期性备份的数据可以分两类: 后台程序代码.运维配置文件修改,一般会定时任务执行 ...
- 升级babel7后,直接引用element-ui中没有暴露出来的组件image-viewer.vue导致的打包错误
问题 & 解决方案 升级babel7后,原先代码中像这样直接引用element-ui组件的地方,出现了报错 Module parse failed: Unexpected token (1:0 ...