WPF 打票机的程序
来源:互联网 发布:小口径单发枪数据 编辑:程序博客网 时间:2024/05/29 08:52
首先,感谢一下公司提供的一次WPF 开发机会. 这个项目也算是大部分完结了. 此次开发不涉及到数据库的搭建, 所以, 我省略了设计数据库这一块. 开始, 我搭建的解决方案目录从上到下依次为: DBAccess , DBModel,Wpiao.BLL,Wpiao.TicketMachine; 是不是看得出来, 我的代码很不规则? 我经过总结我也渐渐发现我这一缺点. 严厉的自我反省才行. 继续吧. DBAccess我是用来做以后的数据库链接的备用类库,DBModel 看着就知道, 放一般的对象模型类. BLL 是放业务逻辑的. 最后一个是WPF界面.
好了, 接下来要说的是, 用到那些方面的知识吧.
这里先说BLL的几个重要类, 因为数据源都是从接口提供, 所以, 要提供一个(RequestPost)类,这个类的作用是POST或者GET请求接口,以string类型返回. 其中可能会涉及到一个返回数据量大的问题, 这样会引出timeout 问题. 但是, 目前还没发现有这个异常存在. 所以, 没做过多的处理. 毕竟打票机没有说有一次性几百M的打票数据去; 另外一个是转换JSON的类, (JsonHelper), 它这里是用到微软本身JSON转换的封装类库 System.Runtime.Serialization.Json; 其中包含序列化和反序列化. 还有的就是一个日志类(WriteLog),是用作日志记录的. 还有一个是(CacheHelper)缓存类, 是用户缓存访问接口的一些必要的数据信息,如Session同步,设置的超时时间是25分钟,超时了, 就进行重置Session.
上述介绍了本项目的类库说明,下面说说WPF的一些知识点吧.
一. WPF和WINFORM 区别
新建的窗体并不是Form, 而是 Window, Form是以cs后缀,启动入口是program.cs ;而WPF是以xaml, 启动入口是App.xaml ; 如下图代码;
<Application x:Class="Wpiao.TicketMachine.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="MainWindow.xaml"></Application>StartupUri 是修改启动程序入口的地方; Winform 的控件是可以在WPF 用的. 只不过, 样式调整会比较麻烦而已.
二. WPF 的布局
很多都是直接根据相应的分辨率进行布局的. 如果你说要兼容到很多不同分辨率的显示器, 第一个就要做到布局不乱的问题. 这个我目前没有太多这方面的经验. 目前我想到的是, 有部分控件的布局位置,得根据代码来实现; 我那打票机是根据1280* 1024的分辨率进行实现的. 我常用的是Grid和Border, 如果你想用StackPanel 也不是不可以. 只是我个人用不习惯.两者的作用如下(百度得来的):
Grid是以表格的方式定位子元素。可以定义行和列,然后将元素布局到表格当中。类似于Html中的Table元素。StackPanel是以水平或者竖直方向对子元素进行排列。相当于Android中的LinearLayout,或者是JavaGUI中的FlowLayout。
我上面说我喜欢用Grid,可能才刚开始接触, 所以就喜欢了. 为啥Border和Grid呢?因为它可以使Grid变成圆角,网上很少有说到相关的Grid怎么弄成圆角的. 其实, 我也走了挺多弯路, 在此, 我废话不多说. 我先贴代码出来吧.
<Window x:Class="Wpiao.TicketMachine.ShowTipWin" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="300" Width="500" WindowState="Normal" AllowsTransparency="True" ResizeMode="NoResize" BorderBrush="Transparent" Background="Transparent" OpacityMask="White" WindowStyle="None" Loaded="Window_Loaded" WindowStartupLocation="CenterScreen" Margin="0" Padding="0"> <Window.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="WinResource.xaml"></ResourceDictionary> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Window.Resources> <Grid > <Border BorderThickness="1" Background="White" CornerRadius="10"> </Border> <Grid > <Border CornerRadius="8" BorderThickness="0" Height="61" VerticalAlignment="Top" Background="#FF51BD4C" HorizontalAlignment="Left" Width="498" Margin="1,1,0,0"> <Label Content="文化惠温馨提示" FontSize="24" HorizontalAlignment="Left" Height="55" VerticalContentAlignment="Center" VerticalAlignment="Top" HorizontalContentAlignment="Center" Width="194" BorderBrush="#FFE2D4D4" Foreground="White" Background="{x:Null}" FontFamily="STKaiti" Margin="2,1,0,0"/> </Border> <TextBox Text="" x:Name="lbcontent" BorderThickness="0" FontWeight="Bold" Foreground="Red" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" TextWrapping="Wrap" HorizontalAlignment="Left" Margin="29,87,0,0" FontSize="18" VerticalAlignment="Top" Height="98" Width="440"/> <Button Content="确定" Style="{StaticResource xComButton}" Foreground="White" HorizontalAlignment="Left" Margin="175,209,0,0" FontSize="24" VerticalAlignment="Top" Width="135" Height="62" Click="Button_Click" Background="#FF36C52F"> </Button> </Grid> </Grid></Window>
先把窗体设置成透明背景 Background="Transparent" , 然后,Grid 嵌套一个Border, Border的子元素只能只有一个,这个我也不知道为啥, 微软定义的规则. 将Border设置成CornerRadius="10"的圆角. 然后再Border里面再嵌套一个Grid, 来放置内容.
上面的代码里面又可以延伸到另外一个问题, 注意到红色的字体没有? 这是一个静态样式的引用, 其实是为了让button也变圆角. 这个因为时间问题, 我这里不多说了哈.
三.分屏技术
其中用到分屏技术,先 System.Windows.Forms.Screen.AllScreens[index], Index的类型是int, 0 代表着主屏, 1 代表副屏, 然后, 再根据 Screen对象进行区域划分Rectangle r1 = s0.WorkingArea; 将 r1 的宽高赋值到 窗体的宽高后再show()一下窗体即可.
四.其他
其他的一些就是很零散的. 比如, WPF的倒计时类并不是timer, 而是, DispatcherTimer timer = new DispatcherTimer(); 设置它的隔多少秒 timer.Interval = TimeSpan.FromMilliseconds(1000);执行一次 Tick+=你的方法();然后就可以start().
第一次写那么多字, 瞬间觉得好累又满足. 哈哈~~新人博客, 还望大神别扔砖头!
- WPF 打票机的程序
- 郁闷的WPF程序
- WPF版本的自动更新程序
- WPF关闭程序的方法
- WPF入门篇--一个WPF的应用小程序
- WPF初学者之几种WPF程序的入口说明
- WPF初学者之几种WPF程序的入口说明
- WPF初学者之几种WPF程序的入口
- WPF程序
- 非常酷的WPF的抽奖程序
- WPF调用Win32程序的方法
- WPF程序本地化的方法Localization
- 我的第一个WPF程序
- 一个WPF的应用小程序
- WPF调用Win32程序的方法
- 我的第一个WPF程序
- 我的第一个WPF程序(最终版!)
- 创建不使用XAML的WPF程序
- java中使用Json数据
- Windows下搭建ReactNative开发环境(Android)
- Zabbix自动添加Mysql多实例监控
- 服务器-华为RH2265 V2 / RH2285 V2 增加内存插法
- C++中STL迭代器的种类和简介
- WPF 打票机的程序
- Hugegraph DistributedStoreManager Class Architecture
- 日期、时间戳互相转换、日期之差
- mac 下安装php imagemagick
- 解决虚拟机能够ping通本机,但是无法上网问题
- VC10中的C++0x特性 Part 2 (3):右值引用
- go 语言中的继承
- github的api调用
- Tensorflow一些常用基本概念与函数