经过前面的学习,今天我做一个比较综合的WPF程序示例,主要包括以下功能:

1) 查询功能。从数据库(本地数据库(local)/Test中的S_City表中读取城市信息数据,然后展示到WPF的Window上的一个ListView上。

2) 数据联动功能。当鼠标左键选中ListView中的某一条记录时,在ListView框下面文本框中显示详细信息。

3) 修改功能。修改TextBox中的内容后,点击“更新”按钮,把修改后的数据保存到数据库中,同时与Listview联动。

第一步、建立一个WPF项目

打开Visual Studio 2013,在菜单上点击文件—>新建—>项目—>WPF应用程序。在弹出界面的“名称”对应的文本框中输入“WpfApp1”,然后点击“确定”按钮。如下图。

第二步:安装Entity Framework

1)  使用NuGet下载最新版的Entity Framework 6.1。在解决方案资源管理器中——>在项目WpfApp1上鼠标右键单击——>弹出一个菜单,选中“管理解决方案的NuGet程序包”,打开NuGet程序包管理界面。如下图。

2)      在NuGet程序包管理界面中搜索 Entity,找到最新版本Entity Framework,点击安装。如下图。

3)      安装完成之后,如下图。


第三步、WPF界面布局

1)      在新建完WPF项目之后,WPF项目中有一个默认界面。如下图。

2)将鼠标放在方框的边缘点击就会产生相应的分割线。如下图。

3) 我们先将窗体随意的分成三行,以后在XAML代码中再进行具体的调整。在添加完分割线之后,看一下下方的XAML代码区域,每个分割线都做为一行RowDefinition。如下图。

4) 在XAML代码编辑界面中将我们刚才定义的三行,修改其高度。代码如下。

        <RowDefinition Height="*" /><RowDefinition Height="Auto" /><RowDefinition Height="22" /> 

说明

第0行

设为*用来放置ListView,这样在程序的实际运行过程会尽可能的充满整个区域

第1行

设为Auto尽量紧凑排列,减少空间的占用(如果这一行中没有放任何控件的话,他会小到0,这样在界面上就不会显示。)

第2行

设为22固定值,只是用来放置按钮控件

说明:

如果是你经常做ASP.NET或是windows的开发,可能会形成一个习惯——直接从工具箱上把控件拖拽到需要的地方。 这样直接拖放控件的方式,VS会自动生成一个固定的坐标,但是这种方式在WPF中不推荐使用,在WPF中推荐使用  Canvas、StackPanel、WrapPanel、DockPanel和Grid面板组合使用来组装界面。

对于WPF的界面布局,有以下几点建议:

第一、控件的布局应该有容器来决定,而不是通过控件的margin属性来控制位置。

第二、控件应避免明确的定义具体的尺寸,因为显示器分辨率及windows窗体的大小都有可能随时改变,如果明确的定义尺寸。

当窗体变动后就会出现大面积的空白或是缺失。但为了控件功能及效果的展示,应该限定一个可接受的最大及最小尺寸。

通过MinWidth, MinHeight, MaxWidth, MaxHeight属性可以实现这一点。

第三、由于现在显示器分辨率非常多(1366×768、1600×900、、1980×1080等等),如果将界面元素位置设置成与屏幕坐标相关,这样做的话是会有风险的。

第四、容器应将有效空间共享给其子控件,这也是为了不在窗体调整后,遗留出大块的空余。

第五、容器嵌套使用,因为不同的容器,表现效果不同,必要时应结合使用。

5)  接下来在工具箱中双击ListView,一个小框会出现在界面上。

6)  接下来在工具箱中双击WrapPanel,又一个大框会出现在界面上。

7)  再增加一个Button按钮。

8)  在拖放完了上面这些控件后,你会发觉当前界面有点乱了,这时刚才我们在顶层Grid上面的画的分割线就要起到作用了,让我们在XAML编辑窗口中对相应的XAML语句进行修改,最终结果如下:

 <Grid><Grid.RowDefinitions><RowDefinition Height="*" /><RowDefinition Height="Auto" /><RowDefinition Height="22" /></Grid.RowDefinitions><ListView Name="listView1" MinWidth="280" ><ListView.View><GridView x:Name="gridView1"><GridViewColumn Header="ContactID"></GridViewColumn><GridViewColumn Header="FirstName"></GridViewColumn><GridViewColumn Header="LastName"></GridViewColumn><GridViewColumn Header="EmailAddress"></GridViewColumn></GridView></ListView.View></ListView><WrapPanel Grid.Row="1" Orientation="Horizontal"></WrapPanel><Button Grid.Row="2" HorizontalAlignment="Right" Click="button1_Click" Name="button1">Refresh</Button></Grid>

这里有几点又需要进行说明:

(1)容器控件Panel,现在界面中有两个容器型的控件一个是Grid,另一个是WrapPanel。它们都是容器型控件,不过表现上有所不同。

(2)大家应该注意到了在WrapPanel及Button上面的Grid.Row="n",这个就是Attached Properties(附加属性)。这个属性的作用是用来设置WrapPanel及Button应该在父容器的什么位置。 Attached Properties的XAML用法就是在自己的属性设置地方直接使用容器的类型名称.容器属性名称(Grid.Row)设置对应的值。

(3)大家应该注意到类似与ListView.View及Grid.RowDefinitions用法,这个叫做Complex Properties(复杂属性)。

(4)     <GridView x:Name="gridView1">

如上面这段代码中的x:Name=" gridCitys "这种用法,叫做Markup Extensions(标记扩展),以轻松实现XAML页面属性赋值,资源引用,类型转换等操作。

例如我们这个示例中使用到的DataGrid对象,然而DataGrid对象又没有Name属性,于是有了Markup Extensions。这样当我们想定位一个没有名字属性的控件,直接为扩展一个名称出来,这个可太方便了。

9)   现在我们的示例中TextBlock和TextBox不是成对出现的,为了实现比较友好的界面一般需要成对出现,而且要在同一水平线上面,不能换行,在WPF中不能使用绝对定位,那应该怎么实现呢?很简单,使用StackPanel面板。修改后的代码如下:

 <WrapPanel Grid.Row="1" Orientation="Horizontal"><StackPanel Orientation="Horizontal" Margin="5,2,5,2"><TextBlock Name="textBlock_ContactID" Text="ContactID:" /><TextBox Name="textBox_ContactID" MinWidth="100" /></StackPanel><StackPanel Orientation="Horizontal" Margin="5,2,5,2"><TextBlock Name="textBlock_FirstName" Text="FirstName:" /><TextBox Name="textBox_FirstName" MinWidth="100" /></StackPanel><StackPanel Orientation="Horizontal" Margin="5,2,5,2"><TextBlock Name="textBlock_LastName" Text="LastName:" /><TextBox Name="textBox_LastName" MinWidth="100" /></StackPanel><StackPanel Orientation="Horizontal" Margin="5,2,5,2"><TextBlock Name="textBlock_EmailAddress" Text="EmailAddress:" /><TextBox Name="textBox_EmailAddress" MinWidth="100" /></StackPanel></WrapPanel>

10) 在Visual Studio 2013中,按F5键,把我们的第一个WPF程序运行起来。然后,你在窗体的边缘随意的拉伸。如以下2图所示,不论窗体如何拉伸或缩小,控件会不断的改变位置——适应最小原则(如果想要让他固定下来的话。那就需要将WrapPanel换成其他的Panel就可以了),但是TextBlock和TextBox总是成对的在同一水平线的位置上。如下图1(缩小)、图2(扩大)所示:

图1

图2

转载于:https://www.cnblogs.com/zzw1986/p/7583545.html

WPF入门教程系列十九——ListView示例(一)相关推荐

  1. WPF入门教程系列十五——WPF中的数据绑定(一)

    使用Windows Presentation Foundation (WPF) 可以很方便的设计出强大的用户界面,同时 WPF提供了数据绑定功能.WPF的数据绑定跟Winform与ASP.NET中的数 ...

  2. WPF入门教程系列十四——依赖属性(四)

    六.依赖属性回调.验证及强制值 我们通过下面的这幅图,简单介绍一下WPF属性系统对依赖属性操作的基本步骤: 借用一个常见的图例,介绍一下WPF属性系统对依赖属性操作的基本步骤: 第一步,确定Base ...

  3. WPF入门教程系列十六——WPF中的数据绑定(二)

    三.绑定模式 通过上一文章中的示例,学习了简单的绑定方式.在这里的示例,要学习一下绑定的模式,和模式的使用效果. 首先,我们来做一个简单示例,这个示例是根据ListBox中的选中项,去改变TextBl ...

  4. WPF入门教程系列四——Dispatcher介绍

    WPF入门教程系列四--Dispatcher介绍 一.Dispatcher介绍 微软在WPF引入了Dispatcher,那么这个Dispatcher的主要作用是什么呢? 不管是WinForm应用程序还 ...

  5. WPF入门教程系列三——Application介绍(续)

    接上文WPF入门教程系列二--Application介绍,我们继续来学习Application 三.WPF应用程序的关闭 WPF应用程序的关闭只有在应用程序的 Shutdown 方法被调用时,应用程序 ...

  6. WPF入门教程系列(二) 深入剖析WPF Binding的使用方法

    同一个对象(特指System.Windows.DependencyObject的子类)的同一种属性(特指DependencyProperty)只能拥有一个binding. 这一点可以通过设置bindi ...

  7. WPF入门教程系列九——布局之DockPanel与ViewBox(四)

    七. DockPanel DockPanel定义一个区域,在此区域中,您可以使子元素通过描点的形式排列,这些对象位于 Children 属性中.停靠面板其实就是在WinForm类似于Dock属性的元 ...

  8. WPF入门教程系列(1)----基础

    一.前言 最近找了一个实习,需要学习WPF,由于之前对这门语言没有任何了解,所以就网上找大牛的博客作为入门基础,为了让自己更加熟悉,我选择了自己边学习边写博客,为了自己同时也为了方便以后他人的学习. ...

  9. WPF入门教程系列(一) 创建你的第一个WPF项目

    WPF基础知识 快速学习绝不是从零学起的,良好的基础是快速入手的关键,下面先为大家摞列以下自己总结的学习WPF的几点基础知识: 1) C#基础语法知识(或者其他.NET支持的语言):这个是当然的了,虽 ...

最新文章

  1. hibernate主配置文件中指定session与当前线程绑定
  2. 【正一专栏】希望才是深深让人绝望的东西-论国足
  3. 设计模式的理解:单例模式(Singleton)
  4. SQL数据库权限授予grant
  5. flutter SlideTransition实现平移动画
  6. LeetCode(617)——合并二叉树(JavaScript)
  7. Petya and Exam 模拟
  8. Python:[-1]、[:-1]、[::-1]、[n::-1] 原理大详解(超全超仔细!)
  9. GPUImage实现水印
  10. BeamSearch的原理和实现
  11. ubuntu安装QQ教程
  12. daemontools的安装、简介
  13. OSChina 周六乱弹 —— 你也有滚床单的这一天呀
  14. Office2016和Office365有什么区别
  15. 微信小程序(组件:路由、表单、媒体、自定义组件,插槽、组件通讯、侦听器、生命周期)
  16. MAC版本subline text快捷键大全
  17. MCAL_VADC配置
  18. 基于QT的网络嗅探器实现(网络安全课程设计)
  19. 小程序也能是App中的引流神器?
  20. 常用向量空间距离计算的几种方法

热门文章

  1. 安装 Python IDLE
  2. C语言 使用递归函数计算1到n之和
  3. php将多个页面写在一个页面,php – 将多个标签添加到WooCommerce单个产品页面
  4. case例句java_case的一个用法--case 嵌套
  5. mac版本自带2.7.10版本的python情况下如何安装和使用python3.x
  6. JS实现select去除option的使用注意事项
  7. [原创]java WEB学习笔记02:javaWeb开发的目录结构
  8. 【树】Kth Smallest Element in a BST(递归)
  9. HTML结构化CSS网页布局入门指南
  10. 直播预告 | 共识、区块链和全球一体化经济