20.WPF项目实战(项目介绍)
1.WEB API:接口,如何获取数据(增删改查)
2.客户端 项目功能:
待办,备忘录,汇总,完成比例,设置系统主题等。
21.WPF项目实战(创建项目结构)
VS使用prism插件新建一个项目MyToDo
此插件自动安装依赖包Prism.DryIoc,还需安装材料包MaterialDesignThemes,安装之后打开项目UML,按它的文档操作一遍
在App.xaml.cs中使主程序继承自PrismApplication
在App.xaml中添加MaterialDesignThemes包的部分(可直接从文档中复制过来)
在MainWindow.xaml中新加一个按钮
下一步添加一个Web Api:在解决方案中新建项目-api项目,命名为MyToDo.Api
设为启动项可正常启动。
22.WPF项目实战(设计首页导航条)
实现效果:
先把整个页面分为两个区域(导航条和主要区域)
<Grid.RowDefinitions><RowDefinition Height="auto"/><RowDefinition/>
</Grid.RowDefinitions>
左边的部分:可以直接从MaterialDesignThemes源码中取出这部分到MyToDo项目中:MaterialDesignThemes中找到启动项的mainWindow,复制需要的部分,导入MaterialDesignThemes,
删掉复制内容中不需要的部分,最后实现:
现需要加入导航条右边的部分,三个按钮和放大缩小处理。
新加头像,在项目文件中新建文件夹Images,添加想要的图片,然后在xaml中添加图片即可
<Image Width="25" Height="25" Source="/Images/1.jpg"/>
注意:需要将图片属性设置为资源,否则可能会出错
注意:插件:XamlStyler.Extension.Windows.VS2022.vsix 安装后直接保存可进行代码的自动对齐。
之前的缩小窗口,放大窗口,关闭窗口,未实现功能,因为此功能本身没有什么多联系,所以可以使用事件来完成。
public MainWindow()
{InitializeComponent();btnMin.Click += (s, e) =>{//把当前窗口的状态改成最小this.WindowState = WindowState.Minimized;};btnMax.Click += (s, e) =>{//判断当前窗口状态,如果是最大化则变为正常的,否则把当前窗口的状态改成最大if(this.WindowState == WindowState.Maximized)this.WindowState = WindowState.Normal;elsethis.WindowState = WindowState.Maximized;};btnClose.Click += (s, e) =>{//关闭当前窗口this.Close();};
}
还可以添加鼠标事件:拖动和鼠标双击处理。
鼠标拖动控件:为需要拖动的控件增加name
//添加鼠标拖动事件
ColorZone.MouseMove += (s, e) => { //判断,如果是正在移动,则拖动窗口if(e.LeftButton == MouseButtonState.Pressed){this.DragMove();}
};//双击的处理
ColorZone.MouseDoubleClick += (s, e) =>
{if (this.WindowState == WindowState.Normal)this.WindowState = WindowState.Maximized;elsethis.WindowState = WindowState.Normal;
};
23.WPF项目实战(绑定菜单)
实现点击旁边的菜单栏,可根据选项动态进行切换界面,动态绑定菜单。有图标,名字,命名空间(用来导航)
创建公共的文件夹,创建一些实体类
1.添加一个系统导航菜单类MenuBar:(包含icon图标,title名字,命名控件nameSpace)
2.在view文件夹中新加窗口:MainView.xaml,在ViewModels新加类:MainViewModels类。
在MainViewModels类中可使用之前创建的MenuBar类,类函数添加导航每个选项的内容。
在主页面:xaml左边的代码中找到对应的需要添加的内容,头像/选项栏/数据模板,数据模板用list绑定MenuBars,界面相关位置绑定MainViewModels中的Icon,Title数据。
使用MainView而不是之前的MainWindowViewModel,在App中的窗口设置修改一下
MainView中需要导入prism,设置上下文实现自动绑定
运行之后,发现选中之后的样式类型可以优化,在app.xaml中增加样式,添加触发器,如果是选中的状态则更改样式,边框大小,边框颜色等(可使用MD中的动态变换颜色)
在MainView.xaml中引用app.xaml中增加样式
再改变选中的颜色和背景颜色:app.xaml中修改对应样式的Border
24.WPF项目实战(菜单导航)
在上一节实现了菜单的界面,这届实现导航的功能。
1.添加所有的子页面。View文件夹中,新添加用户控件IndexView.xaml,MemoView.xaml,SettingsView.xaml,ToDoView.xaml。
2.在ViewModels文件夹中,添加对应的ViewModels类:IndexViewModel.cs,MemoViewModel.cs,SettingsViewModel.cs,ToDoViewModels.cs。
3.加完之后在App.xaml.cs中添加依赖注入,注册为导航
4.实现导航的功能:在MainViewModel.cs中加入命令 DelegateCommand
5.在MainView.xaml中多注册一个区域(新建Extensions文件夹,中新建一个类PrismManager.cs管理区域信息)
6.注册之后就可以在MainViewModel中进行使用了。regionManager
7.导航中上一步下一步切换的功能,使用导航中的回调函数(导航日志,区域导航)
25.WPF项目实战(设计首页)
子页面的样式
显示主页四个图片,手动点击按钮添加代办,手动点击按钮添加备忘录
修改IndexView.xaml,修改样式
(另外:.cs中的快捷键:propfull 然后自动生成变量代码)
26.WPF项目实战(设计首页2)
子页面的样式设计完之后内容填充。
修改IndexView.xaml.cs ,修改实现,列表的绑定,显示所有待办事项。
27.WPF项目实战(设计待办事项界面)
新增待办事项按钮
新增之后显示待办事项
28.WPF项目实战(设计备忘录界面)
新增备忘录按钮
新增之后显示备忘录
29.WPF项目实战(设置界面)
个性化
系统设置
关于更多