甄文超

TNT 数字生活

All Posts in 2023.8


INavigationAware接口

public interface INavigationAware { bool IsNavigationTarget(NavigationContext navigationContext); void OnNavigatedTo(NavigationContext navigationContext); void OnNavigatedFrom(NavigationContext navigationContext); } 当从本页面转到其它页面的时候,会调用OnNavigatedFrom方法,navigationContext会包含目标页面的URI。 当从其它页面导航至本页面的时候,首先会调用IsNavigationTarget,IsNavigationTarget返回一个bool值,简单地说这个方法的作用就是告诉Prism,是重复使用这个视图的实例还是再创建 …

wpf prism

Windows下给Git配置SSH

git安装好了之后,我们就可以注册github账号开始我们的开源旅程了。这里说明一下,git和github其实并没有特殊的关系,github只是使用git的开源代码仓库而已。前面也说到过使用git作为工具的代码仓库有很多,除了github之外还有gitlab以及国内这几年比较火的码云等等。 注册成功之后,我们进入github需要做一件事情就是配置ssh。ssh是安全外壳协议,它本身和git没什么关系,主要是为了使用它来进行安全验证。说白了为了证明你是你,为了方便根据账号做权限管理。比如阻止你clone你没有权限的代码,阻止你push代码到没有权限的远程等等。说白了,这是一个安全工具,通过它可以让我们的账号和代码更加安全。 ssh相关的细节不做过多深入,感兴趣的同学可以自行了解,我们简单说下应该怎么配置。首先我们需要使用ssh-keygen工具来生成我们的ras秘钥。ras是一种对称加密算法 …

git

Git 之 git clone 使用 https 和 ssh 的区别

https 通过 https 克隆到本地后,当再次 push 到 github 远程服务器的时候,都会要求进行账号和密码的输入 ssh ssh是一种相对安全的方式,但是需要在克隆之前先配置和添加好SSH key,当再次 push 到远程 github上面的时候就不需要进行账号密码的输入了 https 利于匿名访问,适合开源项目,可以方便被别人克隆和读取(但没有push权限); ssh 不利于匿名访问,比较适合内部项目,只要配置了SSH key即可自由实现clone和push操作。 …

git

Qt中的QByteArray和自定义结构体之间的相互转换

在Qt项目开发中,经常会碰到自定义结构体和字符数组之间的转换问题,不妨假设结构体名字为custom_struct, 字符数组名字为array_data 1. QByteArray转换为自定义结构体     custom_struct *struct_data = reinterpret_cast<custom_struct *>(array_data.data());   2. 自定义结构体转换为QByteArray    QByteArray array_data; array_data.append((char*)&struct_data, sizeof(struct_data));   未测试 …

QT C++

gdb在Linux下的安装

gdb是GNU调试器,它可以帮助程序员调试C程序,在Linux系统下可以通过安装gdb来进行程序调试。安装gdb有多种方法,下面介绍Linux下几种安装gdb的方法。 一、编译安装gdb 首先下载安装包,我们以gdb-7.7.1.tar.gz为例,可以通过以下命令进行安装: tar zxvf gdb-7.7.1.tar.gz cd gdb-7.7.1 ./configure make make install 安装完成后,在/usr/local/bin目录下就可以找到gdb二进制文件了。 --未测试 二、使用系统包管理器安装gdb 不同的Linux系统可能支持的系统包管理器类型有所不同,比如Debian使用的是dpkg,Fedora使用的是Yum,Centos使用的是RPM。需要根据你使用的系统使用相应的系统包管理器进行安装。比如在Debian系统下,首先执行以下命令搜索可用的gdb软件包 …

QT Linux

log4net .net6的应用程序标准案例

第一步 安装 通过NuGet直接搜索进行安装安装log4net 第二步 编写log4net配置参数 1.添加 log4net.config 文件并更改属性 2.编写 log4net.config &lt;?xml version="1.0" encoding="utf-8" ?&gt; &lt;configuration&gt; &lt;log4net&gt; &lt;!--定义输出到文件中--&gt; &lt;appender name="SysAppender" type="log4net.Appender.RollingFileAppender"&gt; &lt;!--日志的路径--&gt; &lt;file value="Logs/"/&gt; &lt;!--是否覆盖,默认是追加true--&gt; &lt;appendToFile …

.NET wpf

WPF Prism(六)Dialog

一、什么是Dialog 对话框实际上是我们应用程序经常用到得一个功能,类如:Show、Show Dialog。可以弹出一个我们指定得窗口,仅此而已那么在Prism当中,Dialog指的什么? Prism提供了一组对话服务,封装了常用的对话框组件的功能,例如: RegisterDialog/IDialogService (注册对话及使用对话) 打开对话框传递参数/关闭对话框返回参数 回调通知对话结果 二、创建Dialog Dialog其实也是一组用户控件,我们可以创建一个子模块,然后不需要继承IModule,继承了也没有关系,只要不加载该子模块就行,这样我们可以把他当作对话框或者子模块使用,而不需要改动太多代码。值得一提的是,默认情况下这个控件会嵌入到窗体中弹出,所以我们可以定义弹出窗体的一些属性: &lt;prism:Dialog.WindowStyle&gt; …

.NET wpf

WPF Prism(五)Navigation

一、使用场景 在普遍的业务场景当中,必不可少的是页面切换,而Prism就可以使用Navigation功能来进行页面导航,在不同的场景当中会有各种用法,例如在切换页面验证、传递参数、返回上一页、返回下一页等功能。 二、导航的使用 2.1 注册显示区域(region)这个在前面章节已做详细介绍不再赘述。 2.2 注册导航页面(View)之前的介绍中我们一般是将一个View指定到一个region中。而现在我们需要将多个View注册到导航中。例如我们现在有两个子模块(ViewAModule和ViewBModule),我们分别注册导航界面: public class ViewAModule : IModule { public void OnInitialized(IContainerProvider containerProvider) { …

.NET wpf

WPF Prism(四)MVVM

一、前言 在阅读本篇文章之前,最好有ICommand和INotifyPropertyChanged等基础知识。 二、BindableBase BindableBase抽象类实现了INotifyPropertyChanged接口,主要作用当绑定到界面的数据发生改变的时候可以通知界面进行更新。 public class ContentViewModel : BindableBase { private string _message; public string Message { get { return _message; } set { SetProperty(ref _message, value); } } } 三、Command 用于事件 …

.NET wpf

WPF Prism(三)ViewModelLocator

一、命名约定 在Prism当中,你可以基于命名约定,便能够轻松的将View和ViewMode建立关联。前提是你已经为项目创建了Views和ViewModels文件夹(这里就突出了使用模板创建的好处了)。 例如:你的页面为ViewA,那么对应的ViewModel名称为ViewAViewModel。 ​ 你的页面为HeaderView,那么对应的ViewModel名称为HeaderViewModel。 二、允许View自动装配ViewModel &lt;UserControl x:Class="Menu.Views.MenuView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/ …

.NET wpf

WPF Prism(二)Module

一、什么是模块(Module) 本质上来说,对于一个应用程序而言,特定功能的所有View、Logic、Service等都可以独立存在。那么我们称每一个独立的功能我们都可以称之为模块。 通常情况下,我们在一个项目当中的结构是这样的: 所有的模块都在一个项目中,这使得应用程序当中,我们难以区分单独的模块,它们似乎变成了一个整体。所以,当我们开始考虑划分模块之间的关系的时候,并且采用新的模块化解决方案,它的结构将变成如下: 该项目包含了一个启动页,并且在启动页当中,我们划分好了对应的区域。这个时候,我们便可以灵活的配置我们的应用程序功能。使用Prism提供的强大功能,我们可以动态的加载应用程序模块,为指定的Region动态分配内容。 二、创建模块 2.1如果安装了VS插件,则可以直接在Module,它是一个类库。创建好之后是这样的: 2.2查看HeaderModule文件 …

.NET wpf

WPF Prism(一)Region

一、什么是Region 在Prism当中,一个页面我们可以不再为其固定显示的内容,而这种概念变成了区域(Region)划分的概念。将页面显示的区域划分成N个Region,每一个Region将动态分配区域。它将负责承担我们的UI组件或者控件。 二、RegionManager类 RegionManager功能 维护区域集合提供对区域的访问合成视图区域导航定义区域 三、使用RegionManager 首先,我们需要将MainWindow的构造函数传入IRegionManager参数: public partial class MainWindow : Window { public MainWindow(IRegionManager regionManager) { InitializeComponent(); …

.NET wpf

WPF Prism框架介绍

WPF Prism框架介绍 一、什么是PrismPrism是一个用于在 WPF、Xamarin Form、Uno 平台和 WinUI 中构建松散耦合、可维护和可测试的 XAML 应用程序框架。 二、官方地址 https://github.com/PrismLibrary/Prism 基于Prism的VisualStudio扩展包模板: Prism Template Pack,下载它后可以快速创建基于Prism的项目。 三、Prism框架内容 框架中包括 MVVM、依赖注入、Command、Message Event、导航、弹窗等功能。 四、Prism知识章节 Region(区域管理) Module(模块) View Injection(视图注入) ViewModelLocationProvider(视图模型定位) Command(绑定相关) Eevent Aggregator (事件 …

.NET wpf