最近写项目需要用到windows GUI开发,想到的第一个框架是QT。可是对方需要软件在XP运行,QT5.X写的桌面程序无法直接在XP主机运行,还需要一些额外的包装和操作。加上看QT教程,感觉从配置和教程都略微复杂,就放弃了,转用别人介绍的WPF。
一.WPF框架介绍:
WFP的全称是Windows Presentation Foundation,你可以把它翻译成“微软呈现基础”。是微软推出的基于Windows 的用户界面框架,属于.NET Framework 3.0的一部分。它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作。
和QT对比:
QT只能用C++开发;WPF能用C#和C++开发,本教程使用C#开发WPF。
在界面的的组织上,WPF使用.xaml文件来定义控件,完全学习了html的方式。控件之间可以任意组合,任意包含。QT使用.ui文件,和.xaml类似。
其次,在消息机制上,两者也都有很突出的特点。我觉得这种特点就是更加自由的消息机制,Qt中称为槽函数。WPF实现主要通过控件层之间的消息自然传递。而Qt的connect操作直接决定了源和目的两个对象以及各自的触发和响应。如果对二者做一个比较的话,前者依赖其设计精良的布局层次,后者则给与绑定以充分的自由度,而结果都是实现了更加方便的响应机制。可以说,QT基于消息槽函数,而WP开发是基于事件驱动开发。
当然,我在选用任何工具、语言或者框架的时候只是根据个人喜好,这里就不评论WPF和QT孰优孰略额,能快速解决问题的那个自然是我喜欢并采用的。
二.SharpDevelop介绍
sharpdevelop是一款开源的IDE,这款IDE由C#开发而成,也被人们主要用来写C#。当然,也可以写其他诸如Python,Ruby,F#等语言。官网下载地址:http://www.icsharpcode.net/OpenSource/SD/Download/Default.aspx。这里提供五个版本,对应不同的.NET版本,对应关系如下:
SharpDevelop 5 (Frameworks 2.0 to 4.5.1)
SharpDevelop 4.4 (Frameworks 2.0 to 4.5.1)
SharpDevelop 3.2 (Frameworks 2.0, 3.0 and 3.5)
SharpDevelop 2.2 (built for .NET Framework 2.0, unsupported)
SharpDevelop 1.1 (built for .NET Framework 1.1, unsupported)
为了让开发的程序程序兼容XP,我在这里选了SharpDevelop 3.2,当然,你甚至可以3.X,4.X和5.X三个版本都安装,不同版本的SharpDevelop是可以共存的。
三.开发教程
好了,介绍完之后,开始用SharpDevelop开发我们的第一个WPF程序吧:窗口显示四个按钮,分别显示+,-,*和/四个运算符号。
创建WPF项目的流程为,File—new—-solution,然后选择WPF中的WPF Application,最后点击Create即可创建成功。如下图:
创建完成之后,我们来看下项目结构:
我的项目名是tftp,Solution中其实主要就是APP.xaml,APP.xaml.cs,Windows1.xaml和Windows1.xaml.cs这四个文件。至于AssemblyInfo.cs和WPFAssemblyInfo.cs我暂时还没用到,也暂时不清楚功能,后面再补上说明。
1.首先修改Windows1.xaml文件。这个文件就是设计UI空间的文件,你想在里面添加任何按钮什么的,都需要在这个文件修改添加。在项目默认的情况下,Window1.xaml 中存在一个 Grid 元素。这里需要删除Grid元素,并向 Window1.xaml 中加入代码生成四个按钮,我修改后的Window1.xaml文件如下:
<Window x:Class="tftp.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="tftp" Height="300" Width="300">
<StackPanel HorizontalAlignment="Left">
<Button>加法Button>
<Button>减法Button>
<Button>乘法Button>
<Button>除法Button>
StackPanel>
Window>
然后其实界面已经完成,你运行项目,就会弹出一个有四个按钮的界面。在你项目的bin\Debug目录下可以找到这个EXE文件,双击运行也可以。
当然,这个时候的界面实在是太low了,我们想办法给它加点特技,让它看起来更漂亮。
2.修改App.xaml文件。App.xaml文件其实是为了设置和修改在Windows1.xaml文件的控件,也就是美化和加特技。首先需要增加 Application.Resources 块,然后在里面加入如下代码段:
<Style TargetType="Button">
<Setter Property="Width" Value="90" />
<Setter Property="Margin" Value="10" />
Style>
全部的App.xaml文件如下:
"tftp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="Window1.xaml">
<Style TargetType="Button">
<Setter Property="Width" Value="90" />
<Setter Property="Margin" Value="10" />
Style>
以上标记会创建一个应用于该应用程序中所有按钮的 Style,并将这些按钮的 Width 设置为 90,将 Margin 设置为 10。TargetType 属性指定将该样式应用于 Button 类型的所有对象。 每个 Setter 都为 Style 设置不同的属性值。 因此,此时应用程序中的每个按钮的宽度都为 90,边距都为 10。这个时候再运行程序,就会看到按钮布局好看了不少,不再那么拥挤。
接下来再设置点击渐变效果,就是在鼠标点击按钮的时候产生一点显示变化效果。
在 app.xaml 添加下面代码段:
"GrayBlueGradientBrush"
StartPoint="0,0" EndPoint="1,1">
"DarkGray" Offset="0" />
"#CCCCFF" Offset="0.5" />
"DarkGray" Offset="1" />
<Style TargetType="{x:Type Button}">
<Setter Property="Background"
Value="{StaticResource GrayBlueGradientBrush}" />
<Setter Property="Width" Value="80" />
<Setter Property="Margin" Value="10" />
Style>
在 Application.Resources 块的正下方创建了一个名为“GrayBlueGradientBrush”的资源。 此资源将定义一个水平渐变。 此资源可以在该应用程序中的任何位置(包括在 Background 属性的按钮样式 setter 内部中)用作属性值。 现在,所有的按钮都具有此渐变的 Background 属性值。
运行图如下:
2017.7.8更新:
VS2008之后的visual studio 版本都支持WPF程序的开发,以VS2015为例,开发WPF程序的入口为文件–>新建–>项目–>Visulal C#–>windows–>WPF应用程序。建议用宇宙第一IDE开发WPF应用程序,它比起sharpdevelop有许多优势,比如可以用拖拽控件的方式设计界面。