WPF笔记一

摘要:
注意内容:当BUG和WPF运行表单时,调用Hide()方法,然后将Show()异常解决方案的WPF表单设置为无边界。选择本地文件并选择文件夹WPF。右下角会弹出一个消息窗口。WPF显示HTTP网络图片。获取当前应用程序软件的版本。获取匿名对象WPF*的属性值。exe到另一个*exe值传输C#zip压缩和zip解压缩,下载地址:单击此处DotNetZipC#通过文件路径获取文件名C#是判断类型和强制

笔记内容:

  1. BUG、WPF运行窗体时调用Hide()方法,然后再Show()异常的解决方案
  2. WPF 窗体设置为无边框
  3. 选择本地文件
  4. 选择文件夹
  5. WPF实现右下角弹出消息窗口
  6. WPF 显示 HTTP 网络图片
  7. 获得当前应用软件的版本
  8. 获取匿名对象(object)的属性值
  9. WPF *.exe给另一个*.exe传值
  10. C# zip压缩与zip解压,下载地址:点击此处DotNetZip
  11. C#通过文件路径获取文件名
  12. C#中 is判断类型 和 as强制转换
  13. 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 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 = @"siteimage.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笔记一》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iOS -转载-使用Navicat查看数据表的ER关系图Android系统修改硬件设备访问权限下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[转]C/C++实现回调机制的几种方式(回调、槽、代理)

转自:https://www.jianshu.com/p/4f907bba6d5f (1)Callback方式(回调) Callback的本质是设置一个函数指针进去,然后在需要需要触发某个事件时调用该方法, 比如Windows的窗口消息处理函数就是这种类型。比如下面的示例代码,我们在Download完成时需要触发一个通知外面的事件: #include...

消息中间件(1)

问题的起源 ​ 在深入了解消息中间件之前,我想先搞清楚为什么会出现消息中间件这么一款产品,换句话说我们需要弄清楚消息中间件到底解决了一个什么问题。 ​ 在互联网的初级阶段,那个时候一方面没有想现在如此多的用户,另一方面也没有太复杂的业务场景,在那个阶段,应用的架构往往是垂直式的,通俗的讲就是在一个工程中解决所有的问题。那么从进程角度来看,在这一阶段中所有的...

VS关于生成exe文件图片不显示的解决以及两种简单的打包方法

当辛辛苦苦写好一段带有图形界面的代码而exe无法进行图形输出,显然是一件十分苦恼的事情,下面就提供一种此类问题的解决方案,并且简单介绍一种最简单的打包方法以及vs的一种打包 问题描述 当代码在vs上运行时可以得到正常的图形输出 然而而通过exe文件打开却是一片漆黑 问题分析 既然vs上可以正常运行,说明代码是没有问题的,想要解决问题显然下一步需要从ex...

Oracle SQLCODE/SQLERRM

Oracle内置函数SQLCODE和SQLERRM是特别用在OTHERS处理器中,分别用来返回Oracle的错误代码和错误消息。OTHERS处理器应该是异常处理块中的最后的异常处理器,因为它是用来捕获除了别的异常处理器处理以外的所有的Oracle异常,所以在程序的最外层使用一个OTHERS处理器的话,将可以确保所有的错误都会被检测到。在一个内在的异常中,S...

rocketmq-console 控制台使用详解

三、控制台的使用 1. 切换语言为简体中文 上图首页即为“驾驶舱”标签下的图标,中共有4个图:- Broker TOP 10 :是指前10个Brokder处理消息的数量。比如从上图可以看出来,我只有一个Brokder,并且此Brokder处理了1000条消息.- Broker 5min trend: 此图标可以筛选出某个Topic下5分钟的消息数量,可以...

怎样能使winform窗体的大小固定住,不能调整其大小

窗体FormBorderStyle属性设置为:FixedSingle,再把最大化禁用就可以了 使用.Net编写Windows程序,对于窗体控制常见项目 属性:1、让窗体在启动时在指定位置出现 form1.StartPosition Manual CenterScreen WindowsDefaultLocation (default) Window...