WPF 项目开发入门(一) 安装运行
WPF 项目开发入门(二) WPF 页面布局
WPF 项目开发入门(三)WPF 窗体与页面
WPF 项目开发入门(四) MVVM 模式 与 TreeView树组件
WPF 项目开发入门(五)ListView列表组件 与 Expander组件
WPF 项目开发入门(六)DataGrid组件
WPF 项目开发入门(七) From表单组件
WPF 项目开发入门(八)数据库驱动配置与数据库操作
WPF 项目开发入门(九)数据库连接 NHibernate使用
WPF 项目开发入门(十)DevExpress 插件+NHibernate登录
WPF 项目开发入门(十一)DevExpress 插件 Grid表格应用
在制造行业和大型工厂中很多系统都是使用WPF软件开发,因为WPF软件可以很方便的和机械设备上的自动化项目进行数据通信,WPF和传感器的驱动兼容的非常好,在开发数据采集与远程监控等等功能的时候非常简单,同时开发简单上手快。由于工作的原因常常会使用到WPF开发一些工厂的桌面操作系统。本人决定把自己总结的WPF使用技巧,和一些开发中常常用到的知识点写出来。本人会在已后的创作中发表一系列和WPF相关的文章分享给大家。
1 visual studio 安装wpf
开发工具visual studio官网 https://visualstudio.microsoft.co m/zh-hans/downloads/ 下载社区版本,有企业账户也可以下载企业版。
下载完成后点击安装
选择安装
选择中文
设置安装地址
安装驱动与软件包
安装成功后进入到visual studio中,在工具菜单中打开获取工具与功能选项,加载其他需要的驱动包。
将和NET有关的软件和驱动包全部加载进入visual studio工具中来。
2 WPF Application 项目启动
在visual studio工具中新创建一个WPF工程项目,选择C#,XAML,桌面工程类型创建。选择完成后点击下一步。
设置项目名称与项目保存地址
创建完成后打开项目可以看到整体结构
每个项目工程中(应用程序域)中仅且只有一个 Application 实例存在。Application 默认由两部分组成
1 App.xaml
启动配置文件描述。xml元素Application
2 App.xaml.cs
项目启动类,必须继承Application类。
Application 功能
- 跟踪应用程序的生存期并与之交互。
- 检索和处理命令行参数。
- 检测和响应未经处理的异常。
- 共享应用程序范围的属性和资源。
- 管理独立应用程序中的窗口。
- 跟踪和管理导航。
App.xaml 描述
<Application x:Class="WpfApp1.App" ---------------------------- 运行的项目wpf窗体名称
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" -----xml命名空间与规则
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp1"
StartupUri="MainWindow.xaml"> -----项目的启动窗体名称
<Application.Resources>
</Application.Resources>
</Application>
如果需要更改启动窗体,在StartupUri=属性重新设置对应的启动窗体内容。
App.xaml.cs
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
namespace WpfApp1
{
/// <summary>
/// App.xaml 的交互逻辑
/// </summary>
public partial class App : Application {
}
}
启动类main函数,项目自动生成
namespace WpfApp1 {
public partial class App : System.Windows.Application {
/// <summary>
/// InitializeComponent
/// </summary>
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
public void InitializeComponent() {
//窗体模本内容
#line 5 "..\..\App.xaml"
this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);
#line default
#line hidden
}
/// <summary>
/// Application Entry Point.
/// </summary>
[System.STAThreadAttribute()]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
public static void Main() {
//默认启动窗体内容
WpfApp1.App app = new WpfApp1.App();
app.InitializeComponent();
app.Run();
}
}
}
}
3 WPF 初始化第一个窗体
WPF项目中定义自己的第一个窗体,用户是通过窗体与应用程序进行交互和数据通信的。在WPF中所有的窗体都是继承System.Windows.Window类,窗口的主要作用是页面UI设计类似WEB开发中的HTML页面。在开发窗体的过程中代码分为两步分用户UI(xaml)与业务代码(cs)部分。
1 创建一个窗体
窗体名称MainWindow.xaml
<Window x:Class="WpfApp1.MainWindow" ----------------窗体名称(所在项目)
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
Title="MainWindow" Height="450" Width="800">----------------窗体属性设置
<Grid> ----------------窗体UI内容设置
<StackPanel>
<Label x:Name="lblHello">欢迎你光临韬哥WPF代码世界!</Label>
<Button Name="btnThd" Click="btnThd_Click" >大家快来点我啊</Button> ------------btnThd_Click事件 在CS代码定义事件内容
<Button Name="btnAppBeginInvoke" Click="btnThd_Click" >大家快来点我啊</Button>
</StackPanel>
</Grid>
</Window>
2 创建窗体业务代码MainWindow.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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;
using System.Diagnostics;
namespace WpfApp1
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window //继承WPF Window窗体类型
{
public MainWindow()
{
InitializeComponent();
}
//定义事件内容 页面UI中的点击事件
private void btnThd_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("2222222222222");
Trace.WriteLine("欢迎大家来点我哈哈");
}
}
}
弹出框功能:MessageBox.Show(“2222222222222”);
定义后台打印函数 Trace.WriteLine(“”),在后台打印函数方便功能代码调试。引入包:using System.Diagnostics;
3 运行程序点击页面中的按钮,在程序后台可以看大打印出来的数据内容。
XAML 介绍
可以说是用WPF创建应用程序必不可少的最基本的知识就是XAML 。理解它是 HTML的标记符号,用户定义WPF程序页面
xmlns 标记
“xmlns:mc=”为例,“mc”为前缀。,前缀名称 = 的右侧指定命名空间。前缀名称(类似于使用别名)可以为前缀指定任何名称。
在XAML主体中使用xmlns中指定的前缀时,使用“mc:Ignorable”=“ prefix:class name(property) ”的格式。
xmls | 备注 |
---|---|
winfx/2006/xaml/presentation | 引用 System.Windows 命名空间中包含的类的默认命名空间,包括 PresentationCore.dll。由于这个命名空间是默认设置的,所以 Windows、Grid 等可以不用前缀来描述。 |
x: ~ winfx/2006/xaml | 代表了 XAML 的语言特性 |
d: ~ expression/blend/2008 | 定义了仅在Visual Studio 的 WPF 设计视图和可视化设计器**(如 Blend)**中有效的属性。 我经常用到d:DesignHeight、d:DesignWidth、d:DataContext等等,所以我想你应该记住它们 |
mc: ~ openxmlformats.org/markup-compatibility/2006 | 如果您从模板生成它,它将被自动包含在内,因此您可能不会自己编写它,但它指的是Ignorable 属性。通过指定 mc:Ignorable = ”d”,“d:prefix”指向的设计时设置在运行时失效 |
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">
XAML = “CLR 对象的实例化”
XAML 摸板中的元素 ,都是(CLR 对象)标记语言创建一个对象C#实例,因此使用XAML进行页面元素的描述来构建PWF页面内容。
定义一个CLR 类
using System.IO;
using System.Windows.Markup;
namespace Sample{
public class Point{
public int X { get; set; }
public int Y { get; set; }
}
}
class Program{
static void Main(string[] args){
var x = new Sample.Point { X = 1, Y = 2 };
using (var stream = File.Open("test.xaml", FileMode.Create))
XamlWriter.Save(x, stream);
}
}
xaml引入这个CLR描述
<Point X="1" Y="2"
xmlns="clr-namespace:Sample;assembly=SampleLibrary" />
相反,要从 XAML 代码反序列化为 CLR 对象,请使用 XamlReader.Load 方法
**XAML中元素对应CLR **
创建用户定义类“Point”( XAML 代码中的 元素)的实例(= CLR 对象)的示例。
<Point X="1" Y="2"
xmlns="clr-namespace:Sample;assembly=SampleLibrary" />
↑ 项目自定义的C#类 Sample.Point 与XAML标记关系 X,y 传递参数
var obj = new Sample.Point{
X = 1,
Y = 2
}
- XML 命名空间(xmlns 属性)= CLR 命名空间 + 程序集信息
- XML 元素名称 = CLR 类名称
- XML 属性 = CLR 对象属性值设置(属性语法)
System.Uri 类的实例化示例
Uri 类(系统命名空间)(来自 XAML 代码中的 元素)的实例(= CLR 对象)的示例。
< Uri xmlns = "clr-namespace: System ; assembly = System">
http://www.atmarkit.co.jp/ </Uri>
var converter = new System.UriTypeConverter();
var obj = converter.ConvertFrom("http://www.atmarkit.co.jp/");
// ↑System.Uri类(=<Uri>元素)包含
// [TypeConverter(typeof(UriTypeConverter))]带属性
XAML 代码中每个元素的字符串根据分配到的CLR 类中的 TypeConverter 属性值进行传递参数。
例如,根据给定的TypeConverter属性的“UriTypeConverter”,将XAML代码中元素的字符串转换为C#代码中Uri类的一个实例(=CLR对象)到 Uri 类.