WPF笔记一
笔记内容:
- BUG、WPF运行窗体时调用Hide()方法,然后再Show()异常的解决方案
- WPF 窗体设置为无边框
- 选择本地文件
- 选择文件夹
- WPF实现右下角弹出消息窗口
- WPF 显示 HTTP 网络图片
- 获得当前应用软件的版本
- 获取匿名对象(object)的属性值
- WPF *.exe给另一个*.exe传值
- C# zip压缩与zip解压,下载地址:点击此处DotNetZip
- C#通过文件路径获取文件名
- C#中 is判断类型 和 as强制转换
- WPF 获取程序路径的一些方法,根据程序路径获取程序集信息
1BUG、WPF运行窗体时调用Hide()方法,然后再Show()异常的解决方案
XAML页面:
Closed="Window_Closed"
CS后台:
private void Window_Closed(object sender, EventArgs e)
{
this.Hide();
}
当再次显示Show()的时候出现异常;
noti.Click += delegate
{
this.Show();
};
解决方案;重写OnClosing事件 解决窗口隐藏后不能再开的bug。
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
this.Hide();
e.Cancel = true; //不关闭窗口
}
关闭事件Closing 和Closed的区别
在窗口真正关闭之前,先触发Closing,然后才会触发 Closed。
2、WPF 窗体设置为无边框
方案1:
<Window Height="0" Width="0" WindowStyle="None">
3、选择本地文件
private void OpenFile_Click(object sender, RoutedEventArgs e)
{
// 实例化OpenFileDialog
var openFileDialog = new Microsoft.Win32.OpenFileDialog()
{
Filter = "*.xml|*.XML", //默认扩展名
Title = "选择文件", //将显示在对话框标题栏中的标题
InitialDirectory="c:\\", //默认选择文件的路径
RestoreDirectory=true //记录上次选择的路径
};
var result = openFileDialog.ShowDialog();
if (result == true)
{
//取得文件路径
string filename = openFileDialog.FileName;
}
}
4、选择文件夹
选择文件夹使用的是System.Windows.Forms的密封类FolderBrowserDialog
所有需要添加引用:using System.Windows.Forms;
private void dialogFolder_Click(object sender, RoutedEventArgs e)
{
var dialog = new FolderBrowserDialog()
{
SelectedPath = @"f:", //默认选项的文件夹路径
Description = "请选择一个文件夹", //将显示在对话框标题栏中的标题
ShowNewFolderButton = true //是否显示对话框左下角 新建文件夹 按钮,默认为 true
}; var result = dialog.ShowDialog();
if (result == System.Windows.Forms.DialogResult.Cancel)
{
//取消选
return;
}
//取得文件夹路径
string foldername = dialog.SelectedPath.Trim();
//处理CODE
//处理完成打开指定的文件夹
System.Diagnostics.Process.Start("explorer.exe ", this.txtFolder.Text);
}
5、WPF实现右下角弹出消息窗口
1) 引用
using System.Windows.Threading;
2)实现
public MainWindow()
{
InitializeComponent();
timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(300);
timer.Tick += timer_Tick;
this.Left = SystemParameters.WorkArea.Width - this.Width;
this.EndTop = SystemParameters.WorkArea.Height-this.Height;
this.Top = SystemParameters.WorkArea.Height;
}
private DispatcherTimer timer;
public double EndTop { get; set; } void timer_Tick(object sender, EventArgs e)
{
while (this.Top > EndTop)
{
this.Top -= 5;
}
} private void Window_Loaded_1(object sender, RoutedEventArgs e)
{
timer.Start();
}
6、WPF 显示 HTTP 网络图片
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http//网络图片地址");
WebResponse response = request.GetResponse();
Image img = Image.FromStream(response.GetResponseStream());
7、获得当前应用软件的版本
string version = Version(System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetEntryAssembly().Location).ProductVersion);
8、获取匿名对象(object)的属性值
Type type = obj.GetType();
PropertyInfo[] ps = type.GetProperties();
foreach (PropertyInfo p in ps)
{
var n = p.Name; //属性名
var v = p.GetValue(obj, null); //属性值
var t = p.PropertyType; //属性类型
}
9、WPF *.exe给另一个*.exe传值
第一步:在接收的*.exe的App.xaml.cs设置程序运行时触发的事件
protected override void OnStartup(StartupEventArgs e)
{
if (e.Args != null && e.Args.Length > 0)
{
this.Properties["args"] = e.Args[0];
}
base.OnStartup(e);
}
第二步:取值
if (Application.Current.Properties["args"] != null)
{
string args = Application.Current.Properties["args"].ToString();
}
第三步、给*.exe传值
System.Diagnostics.ProcessStartInfo exe = new System.Diagnostics.ProcessStartInfo(@"路径*.exe", "args参数");
System.Diagnostics.Process.Start(a);
10、C# zip压缩与zip解压
网络上这方面的插件比较多,如(ICSharpCode.SharpZipLib.dll),本人推荐使用DotNetZip。
1)asp.net 网络下载应用
用途:根据URL参数选择服务器的文件,供用户下载,服务器不需要保存zip压缩文件。
2)C#压缩本地文件,然后保存到指定的地址
3)根据zip文件路径解压文件
4)可以删除zip文件里指定的某个文件
5)可以跟现有的zip压缩文件添加文件
具体使用方法,网上搜索DotNetZip使用,或者是Ionic.Zip
下载地址:点击此处DotNetZip
11、C#通过文件路径获取文件名
以前用获取文件后缀名或文件名的时候,总是使用LastIndexOf、Replace等,其实不需要;
使用System.IO.Path可以完全不需要那样。
示例:
string fullPath = @"\site\image.gif";
string filename = System.IO.Path.GetFileName(fullPath); //文件名 image.gif
string extension = System.IO.Path.GetExtension(fullPath); //扩展名 .gif
string name = System.IO.Path.GetFileNameWithoutExtension(fullPath);// 没有扩展名的文件名 image
string directoryname = System.IO.Path.GetDirectoryName(fullPath); //文件所在的目录
12、C#中 is判断类型 和 as强制转换
使用as操作符转换,
使用传统C风格的强制转型
使用is来做一个转换测试,然后再使用as操作符或者强制转
示例一:
object o = *;
try
{
MyType t = (MyType) o;
if (t != null)
{
////转换成功
}
else
{
////转换失敗
} }
catch
{
////异常处理
}
示例二:
if(T is System.String)
示例三:
public static T Haha<T>()
{
Type tp = typeof(T);
if (tp.FullName == "System.String")
{
//如果String 类型
}
else if (tp.FullName == "System.Data.DataTable")
{
//如果DataTable类型
}
return tp.ToString();
}
WPF笔记一的更多相关文章
- WPF笔记(2.8 常用的布局属性)——Layout
原文:WPF笔记(2.8 常用的布局属性)--Layout 这一节老没意思,啰里啰唆的尽是些HTML的属性,挑几个好玩的List出来,备忘:Padding与Margin的区别:Margin指控件边界与 ...
- WPF笔记(2.9和2.10)——Layout
原文:WPF笔记(2.9和2.10)--Layout 2.9讲的是,如果内部设定超过容器大小,怎么办?StackPanel会裁剪越界部分DockPanel和Grid会智能判断,从而决定换行. 2.10 ...
- WPF笔记(2.7 文字布局)——Layout
原文:WPF笔记(2.7 文字布局)--Layout 这一节介绍的是文字布局的几个控件:1.TextBlock 最基本的文字控件可以配置5个Font属性.TextWraping属性,&quo ...
- WPF笔记(2.5 Canvas)——Layout
原文:WPF笔记(2.5 Canvas)--Layout Canvas是最精确的布局容器--绝对定位,此书作者不建议使用,以为控件的大小一般会随着内部字体图片的动态生成而自动变化,所以使用前三种布局是 ...
- WPF笔记(2.6 ViewBox)——Layout
原文:WPF笔记(2.6 ViewBox)--Layout 在Canvas外面包一层ViewBox,可以使Canvas内的控件填充整个ViewBox,并随着ViewBox的大小变化而同步变化,这是因为 ...
- WPF笔记(2.4 Grid)——Layout
原文:WPF笔记(2.4 Grid)--Layout 第一章已经简单介绍过这个容器,这一节详细介绍.Grid一般是用表格(Grid.Row 和Grid.Column )的,比StackPanel更细致 ...
- WPF笔记(2.2 DockPanel)——Layout
原文:WPF笔记(2.2 DockPanel)--Layout 读完了这一节,发现DockPanel就是过去winform中的Dock属性.原来的Dock属性是子控件设置,而其父亲级别不用设置.现在W ...
- WPF笔记(2.3 StackPanel)——Layout
原文:WPF笔记(2.3 StackPanel)--Layout StackPanel用于小规模的排版布局,比如说一个局部下几个textbox和Button啦.Orientation属性有Vertic ...
- WPF笔记(1.10 绘图)——Hello,WPF!
原文:WPF笔记(1.10 绘图)--Hello,WPF! 书中的代码语法过时了,改写为以下(测试通过): <Button> <Button.L ...
- WPF笔记(1.9 样式和控件模板)——Hello,WPF!
原文:WPF笔记(1.9 样式和控件模板)--Hello,WPF! 资源的另一个用途是样式设置: <Window > <Window.Resources> <St ...
随机推荐
- java线程详解(二)
1,线程安全 先看上一节程序,我们稍微改动一下: //线程安全演示 //火车站有16张票,需要从四个窗口卖出,如果按照上面的多线程实现,程序如下 class Ticket implements Run ...
- Event --mysql的scheduler.md
事件调度器event 相当于oracle scheduler CREATE [DEFINER = { user | CURRENT_USER }] EVENT [IF NOT EXISTS] even ...
- 马踏飞燕——奔跑在Docker上的Spark
目录 为什么要在Docker上搭建Spark集群 网络拓扑 Docker安装及配置 ssh安装及配置 基础环境安装 Zookeeper安装及配置 Hadoop安装及配置 Spark安装及配置 集群部署 ...
- 女友要下岗?Windows 10的Cortana何方妖孽?
在Windows 10中,一大特色就是内置的Cortana小娜.她的出现为广大单身贵族带来了福音,就连天天秀恩爱的情侣也有了危机感. 小娜,你这样夺位这样真的好么? 还不帮我快快开始搜索 从Windo ...
- delphi 获取两个颜色差值
前面说了已经获取到颜色值了,现在需要比较两个颜色的差值. 两个颜色的根据RGB的差来取,有两种情况: 1.(R的平方+G的平方+B的平方)开根号,再两个颜色值相减获取差值. 2.(((R1-R2)的平 ...
- iOS 开发UI篇 -- 懒加载学习
1. 懒加载基本 懒加载--也称为延迟加载,即在需要的时候才加载( 效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实 ...
- SQL语句 in和inner join各有什么优点
比如A1表 100W行 A2表50W行select a.* from A1 a where a.column1 in (select b.column1 from A2 b where b.colum ...
- Android中Service深入学习
概述 1.当用户在与当前应用程序不同的应用程序时,Service可以继续在后台运行. 2.Service可以让其他组件绑定,以便和它交互并进行进程间通信. 3.Service默认运行在创建它的应用程序 ...
- [ACM_几何] Metal Cutting(POJ1514)半平面割与全排暴力切割方案
Description In order to build a ship to travel to Eindhoven, The Netherlands, various sheet metal pa ...
- jpa知识点
@NotFound(action=NotFoundAction.IGNORE) 使用hibernate 注解配置实体类的关联关系,在many-to-one,one-to-one关联中,一边引用自另一边 ...