Halcon学习笔记(3):WPF 框架搭建,MaterialDesign+Prism
前言
其实我更喜欢CommunityToolkit.mvvm+HandyControl。但是因为找工作,你不能去抗拒新事物。这里就当体验一下完整的流程好了。
环境
- windows 11
- .net core 8.0
Nuget安装
新建WPF 类库项目
新建项目的时候,添加WPF项目,新建完成之后将APP.xaml等文件删除
在属性里面改成类库
初始化Prism
详细过程看这个视频好了,这里就不再展开了。
WPF机器视觉项目实战(2024首发版) 客户端搭建:https://www.bilibili.com/video/BV14m411Z78V/?p=13&spm_id_from=pageDriver&vd_source=17cf6a5a912b0a39a628030a5814462c
App启动页初始化
PrismApplication:将StartupUri去掉
<prism:PrismApplication x:Class="MachineVision.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MachineVision"
xmlns:prism="http://prismlibrary.com/">
<Application.Resources>
</Application.Resources>
</prism:PrismApplication>
App.xaml.cs
using MachineVision.Views;
using Prism.DryIoc;
using Prism.Ioc;
using System.Configuration;
using System.Data;
using System.Windows;
namespace MachineVision
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : PrismApplication
{
protected override Window CreateShell()
{
return Container.Resolve<MainView>();
}
protected override void RegisterTypes(IContainerRegistry services)
{
}
}
}
重写MainView
Ioc注入
这里要简单讲解一下Prism的声明周期了,有两种注入模式
/// <summary>
/// 创造时直接返回Window,但是这样就不能用IOC注入了
/// </summary>
/// <returns></returns>
protected override Window CreateShell()
{
//return new MainView();
return null;
}
/// <summary>
/// 在创造完之后获得Windows
/// </summary>
protected override void OnInitialized()
{
var container = ContainerLocator.Container;
var shell = container.Resolve<object>("MainView");
if (shell is Window view)
{
//通过region容器重新注入Window
var regionManager = container.Resolve<IRegionManager>();
RegionManager.SetRegionManager(view, regionManager);
RegionManager.UpdateRegions();
//找到首页的导航,初始化首页
if (view.DataContext is INavigationAware navigationAware)
{
navigationAware.OnNavigatedTo(null);
App.Current.MainWindow = view;
}
}
base.OnInitialized();
}
我们这里还是推荐使用第二种注入方式的,因为第二种注入方式可以得到IOC的对象。
主要每次都要重新生成一下解决方案,我不知道为什么我这里重新生成解决方案好像没什么效果