当前位置: 首页 > news >正文

WPF自定义Dialog模板,内容用不同的Page填充

因为审美的不同,就总有些奇奇怪怪的需求,使用框架自带的对话框已经无法满足了,这里记录一下我这边初步设计的对话框。别问为啥要用模板嵌套Page来做对话框,问就是不想写太多的窗体。。。。

模板窗体(XAML)

<Window x:Class="换成自己的程序集.DialogModel"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:SCADA"mc:Ignorable="d"WindowStyle="None"WindowStartupLocation="CenterScreen"AllowsTransparency="True"Background="#060931"Foreground="White"Title="DialogModel" Height="450" Width="600"><Window.Resources><Style TargetType="DockPanel" x:Key="DockPanel"><Setter Property="Background" ><Setter.Value><ImageBrush ImageSource="/Images/top.png"/></Setter.Value></Setter></Style><Style TargetType="StackPanel" x:Key="StackPanel"><Setter Property="Background" ><Setter.Value><ImageBrush ImageSource="/Images/tb_1.png"/></Setter.Value></Setter></Style><Style TargetType="Button" x:Key="Button"><Setter Property="Background" ><Setter.Value><ImageBrush ImageSource="/Images/btn1.png"/></Setter.Value></Setter><Setter Property="BorderThickness" Value="0"/><Setter Property="BorderBrush" Value="Transparent"/><Setter Property="Foreground" Value="White"/></Style></Window.Resources><Grid x:Name="MyDialog"><Grid.RowDefinitions><RowDefinition Height="auto"/><RowDefinition/><RowDefinition Height="auto"/></Grid.RowDefinitions><!--头部--><DockPanel x:Name="TOP" Style="{StaticResource DockPanel}" VerticalAlignment="Center" Height="60" Margin="0"><TextBlock Text="{Binding DialogTitle}" Foreground="White" FontSize="20" VerticalAlignment="Center" Margin="20 0 0 0"/><WrapPanel   VerticalAlignment="Center" HorizontalAlignment="Right"><Button Height="20" Margin="5 0 5 0" Width="20" Padding="0"  Background="Transparent" BorderBrush="Transparent" Foreground="White" x:Name="btnMin" Content="—" /><Button Height="20" Margin="5 0 5 0" Width="20" Padding="0" Background="Transparent" BorderBrush="Transparent" Foreground="White" x:Name="btnMax" Content="❐" /><Button Height="20" Margin="5 0 5 0" Width="20" Padding="0" Background="Transparent" BorderBrush="Transparent" Foreground="White" x:Name="btnClose" Content="╳"/></WrapPanel></DockPanel><!--内容--><Frame x:Name="MainFrame" Content="{Binding CurrentPage}" Grid.Row="1" NavigationUIVisibility="Hidden" BorderThickness="0"/><StackPanel Grid.Row="2" Style="{StaticResource StackPanel}" Visibility="{Binding ISVisible}"><WrapPanel  HorizontalAlignment="Right" ><Button  Style="{StaticResource Button}" Margin=" 0 10 20 10" Click="Confirm" Height="40" Width="120" Content="确定" /><Button  Style="{StaticResource Button}" Margin=" 0 10 10 10" Height="40" Width="120" Click="Cancel"   Content="取消" /></WrapPanel></StackPanel></Grid>
</Window>

模板窗体(cs)

/// <summary>
/// DialogModel.xaml 的交互逻辑
/// </summary>
public partial class DialogModel : Window, INotifyPropertyChanged
{public event PropertyChangedEventHandler PropertyChanged;/// <summary>/// 消息通知方法/// </summary>/// <param name="propertyname"></param>public void OnPropertyChanged([CallerMemberName] string propertyname = ""){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyname));}public DialogModel(Page page, string title,string Visible= "Visible"){InitializeComponent();DataContext = this;ISVisible = Visible;CurrentPage = page;DialogTitle = title;btnMin.Click += (s, e) => { this.WindowState = WindowState.Minimized; };btnMax.Click += (s, e) =>{if (this.WindowState == WindowState.Maximized)this.WindowState = WindowState.Normal;else{this.ResizeMode = ResizeMode.NoResize;this.WindowState = WindowState.Maximized;}};btnClose.Click += (s, e) => { this.Close(); };TOP.MouseMove += (s, e) =>{if (e.LeftButton == MouseButtonState.Pressed){this.DragMove();}};}#region 字段属性private string title;/// <summary>/// 对话框标题/// </summary>public string DialogTitle{get { return title; }set{title = value; OnPropertyChanged();}}private Page currentpage;public Page CurrentPage{get { return currentpage; }set{currentpage = value; OnPropertyChanged();}}private string visible;/// <summary>/// 是否显示确认取消按钮组,Visible-显示,Collapsed隐藏/// </summary>public string ISVisible{get { return visible; }set{visible = value; OnPropertyChanged();}}#endregion/// <summary>/// 确认方法,此处未返回值是因为主要内容都在Page里面。业务逻辑都在Page中。你也可以放置在此处,具体如何传值得靠你自己/// </summary>private void Confirm(object sender, RoutedEventArgs e){this.DialogResult = true;this.Close();}/// <summary>/// 取消方法/// </summary>private void Cancel(object sender, RoutedEventArgs e){this.Close();}
}

Page(XAML,引用了materialDesign库,没有的话用你自己定义的page就好)

<Page x:Class="*****.Pages.User"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:SCADA.Pages"xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"mc:Ignorable="d" Foreground="White"d:DesignHeight="450" d:DesignWidth="400"Title="User"><Page.Resources><Style TargetType="Grid" x:Key="Grid"><Setter Property="Background"><Setter.Value><ImageBrush ImageSource="/Images/tb_1.png"/></Setter.Value></Setter></Style></Page.Resources><Grid Style="{StaticResource Grid}"><StackPanel Margin="16" Width="300" HorizontalAlignment="Center" VerticalAlignment="Center"><TextBox Margin="10"  Text="{Binding UserName}"materialDesign:HintAssist.Hint="UserName"/><TextBox Margin="10"  Text="{Binding Account}"materialDesign:HintAssist.Hint="Account"/><TextBox Margin="10"  Text="{Binding PassWord}"materialDesign:HintAssist.Hint="PassWord"/><ComboBox x:Name="CurrentRole" SelectionChanged="RoleChange"  Margin="10"  materialDesign:ComboBoxAssist.MaxLength="2" DisplayMemberPath="Name" SelectedValuePath="Id" ItemsSource="{Binding Roles}" materialDesign:HintAssist.Hint="请选择用户角色" materialDesign:HintAssist.HintOpacity=".26" IsEditable="True"></ComboBox><CheckBox Margin="10" Content="是否启用" IsChecked="{Binding IsActive}" /><StackPanel HorizontalAlignment="Right" Orientation="Horizontal"><Button Margin="0,8,8,0" Click="Confirm" Content="确认"></Button><Button Margin="0,8,8,0"  Click="Cancel" Content="取消"></Button></StackPanel></StackPanel></Grid>
</Page>

Page(.cs)

/// <summary>
/// User.xaml 的交互逻辑
/// </summary>
public partial class User : Page, INotifyPropertyChanged
{#region 通知public event PropertyChangedEventHandler PropertyChanged;/// <summary>/// 消息通知方法/// </summary>/// <param name="propertyname"></param>public void OnPropertyChanged([CallerMemberName] string propertyname = ""){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyname));}#endregion
//这里的数据库用的EF,这里为啥这样写参考我前面的动态配置EF连接字符串的文章,此处可删string SQLConnection = EFConnection.GetConnection(".", "sa", "123456", "XYDB", false);public User(){InitializeComponent();DataContext = this;//必要//下面可删除//Roles = new List<SelectRole>();//Notice.MainUI = Application.Current.MainWindow;//string config = SysConfig.GetConfig(SysConfig.PathBase, "SysSet");//if (config != null)//{//    var mo = JsonConvert.DeserializeObject<SystemSetModel>(config);//    SQLConnection = EFConnection.GetConnection(mo.DbIP, mo.DbAccount, mo.DbPassWord, mo.DbName, false);//}在此初始化所有角色//using (var db = new DBEntities(SQLConnection))//{//    var role = db.SysRoles.Where(m => m.IsActive).ToList();//    if (role != null && role.Count > 0)//    {//        foreach (var item in role)//        {//            SelectRole role1 = new SelectRole();//            role1.Id = item.Id;//            role1.Name = item.RoleName;//            Roles.Add(role1);//        }//    }//}}#region 属性字段private Guid id;/// <summary>/// Id/// </summary>public Guid Id{get { return id; }set{id = value;OnPropertyChanged();//参数可以不写,}}private string username;/// <summary>///用户名/// </summary>public string UserName{get { return username; }set{username = value; OnPropertyChanged();}}private string account;/// <summary>///账号/// </summary>public string Account{get { return account; }set{account = value; OnPropertyChanged();}}private string password;/// <summary>///密码/// </summary>public string PassWord{get { return password; }set{password = value; OnPropertyChanged();}}private bool isactive;/// <summary>/// 状态/// </summary>public bool IsActive{get { return isactive; }set{isactive = value;OnPropertyChanged();}}private bool isadd = true;/// <summary>/// 是否添加用户,用于辨别确认方法是添加还是编辑/// </summary>public bool IsAdd{get { return isadd; }set{isadd = value;OnPropertyChanged();}}private Guid roleid;/// <summary>/// 选定的角色Id/// </summary>public Guid RoleId{get { return roleid; }set{roleid = value;OnPropertyChanged();//参数可以不写,}}private List<SelectRole> roles;/// <summary>/// 可选的角色列表/// </summary>public List<SelectRole> Roles{get { return roles; }set{roles = value;OnPropertyChanged();}}#endregion/// <summary>/// 添加/编辑/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void Confirm(object sender, RoutedEventArgs e){try{//下面的逻辑替换成自己的//using (var db = new DBEntities(SQLConnection))//{//    //添加用户//    if (IsAdd)//    {//        var Current = db.SysUsers.FirstOrDefault(m => m.Account == Account);//        if (Current == null)//        {//            SysUser user = new SysUser();//            user.Id = Guid.NewGuid();//            user.Name = UserName;//            user.Account = Account;//            user.PassWord = PassWord;//            user.IsActive = IsActive;//            user.CreateTime = DateTime.Now;//            user.LoginNum = 0;//            user.LoginTime = DateTime.Now;//            User_Role user_Role = new User_Role();//            user_Role.Id = Guid.NewGuid();//            user_Role.UserId = user.Id;//            user_Role.RoleId = RoleId;//            user.User_Role.Add(user_Role);//            db.SysUsers.Add(user);//            db.SaveChanges();//            Notice.SuccessNotification_Dark("添加成功", 20, 5);//            // 获取当前页面所在的窗体//            Window window = Window.GetWindow(this);//            // 检查是否找到窗体并关闭它//            if (window != null)//            {//                window.Close();//            }//        }//        else//        {//            Notice.WarningNotification_Dark($"当前用户账号已存在!", 20, 5);//        }//    }//编辑用户//    else//    {//        var Current = db.SysUsers.FirstOrDefault(m => m.Id != Id && m.Account == Account);//        if (Current == null)//        {//            var User = db.SysUsers.FirstOrDefault(m => m.Id == Id);//            if (User != null)//            {//                db.Entry(User).State = EntityState.Detached;//取消跟踪免得修改主键冲突//                User.Name = UserName;//                User.Account = Account;//                User.PassWord = PassWord;//                User.IsActive = IsActive;//                var role = User.User_Role.FirstOrDefault();//                if (role != null)//有配置角色//                {//                    role.RoleId = RoleId;//                    db.User_Role.Add(role);//                }//                else//无配置角色//                {//                    User_Role userRole = new User_Role();//                    userRole.Id = Guid.NewGuid();//                    userRole.UserId = User.Id;//                    userRole.RoleId = RoleId;//                    db.User_Role.Add(userRole);//                }//                db.Entry(User).State = EntityState.Modified;//                db.SaveChanges();//                Notice.SuccessNotification_Dark("编辑成功", 20, 5);//                // 获取当前页面所在的窗体//                Window window = Window.GetWindow(this);//                // 检查是否找到窗体并关闭它//                if (window != null)//                {//                    window.Close();//                }//            }//            else//            {//                Notice.FailtureNotification_Dark("未找到当前用户", 20, 5);//                return;//            }//        }//        else//        {//            Notice.WarningNotification_Dark($"当前账号已存在!", 20, 5);//        }//    }//}}catch (Exception ex){Notice.FailtureNotification_Dark($"失败:{ex.Message}", 20, 5);}}/// <summary>/// 取消/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void Cancel(object sender, RoutedEventArgs e){// 获取当前页面所在的窗体Window window = Window.GetWindow(this);// 检查是否找到窗体并关闭它if (window != null){window.Close();}}private void RoleChange(object sender, SelectionChangedEventArgs e){RoleId=(Guid)CurrentRole.SelectedValue;}
}
public class SelectRole
{public Guid Id { get; set; }public string Name { set; get; }
}

使用方法(供参考):

添加用户:

User user = new User();
DialogModel dialog = new DialogModel(user, "添加用户", "Collapsed");
dialog.ShowDialog();

编辑用户(需要赋值):

 /// <summary>/// DataGird的自定义操作栏的编辑按钮/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void UserEdit(object sender, RoutedEventArgs e){UserInfoDto userInfo = new UserInfoDto();var co = (Control)sender;userInfo = (UserInfoDto)co.DataContext;//获取当前行数据User user = new User();//实例化Pageuser.IsAdd = false;//标识是编辑user.Id = userInfo.Id;//将当前行信息给到Page,绑定到控件user.UserName = userInfo.Name;user.Account = userInfo.Account;user.PassWord = userInfo.PassWord;user.IsActive = userInfo.IsActive;user.RoleId = userInfo.RoleId;for (int i = 0; i < user.Roles.Count; i++){if (user.Roles[i].Id == userInfo.RoleId){if (user.Roles.Count > 1){user.Roles.Remove(user.Roles[i]);user.Roles.Insert(0, user.Roles[i]);}}}DialogModel dialog = new DialogModel(user, "编辑用户", "Collapsed");dialog.ShowDialog();}

最终结果(用到的背景图片啥的我就不贴了,毕竟我觉得不太好看):

相关文章:

WPF自定义Dialog模板,内容用不同的Page填充

因为审美的不同&#xff0c;就总有些奇奇怪怪的需求&#xff0c;使用框架自带的对话框已经无法满足了&#xff0c;这里记录一下我这边初步设计的对话框。别问为啥要用模板嵌套Page来做对话框&#xff0c;问就是不想写太多的窗体。。。。 模板窗体&#xff08;XAML&#xff09;…...

[数据集][目标检测]智慧养殖场肉鸡健康状态检测数据集VOC+YOLO格式4657张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4657 标注数量(xml文件个数)&#xff1a;4657 标注数量(txt文件个数)&#xff1a;4657 标注…...

Linux 应用安全

1 怎样使用 nmcli 创建新连接&#xff0c;并为其配置静态 IP 地址等参数&#xff1f; # nmcli connection add con-name "连接名" ifname "接口名" type ethernet # nmcli connection modify "连接名" ipv4.method manual ipv4.address "…...

优化内存工具 | RAM Saver Pro v24.9 便携版

RAM Saver是一款专业的RAM优化工具&#xff0c;旨在提高计算机的性能和运行速度。它通过多种优化技术&#xff0c;如内存碎片整理、CPU和主板缓存效率提升、恢复内存等&#xff0c;为应用程序提供更多的内存资源&#xff0c;从而使系统运行更加流畅。适合所有需要优化内存使用和…...

后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0920)

十三、文章分类页面 - [element-plus 表格] Git仓库&#xff1a;https://gitee.com/msyycn/vue3-hei-ma.git 基本架子 - PageContainer 功能需求说明&#xff1a; 基本架子-PageContainer封装文章分类渲染 & loading处理文章分类添加编辑[element-plus弹层]文章分类删除…...

众数信科AI智能体政务服务解决方案——寻知智能笔录系统

政务服务解决方案 寻知智能笔录方案 融合民警口供录入与笔录生成需求 2分钟内生成笔录并提醒错漏 助办案人员二次询问 提升笔录质量和效率 寻知智能笔录系统 众数信科AI智能体 产品亮点 分析、理解行业知识和校验规则 AI实时提醒用户文书需注意部分 全文校验格式、内…...

OpenCV特征检测(4)检测图像中的角点函数cornerHarris()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 Harris 角点检测器。 该函数在图像上运行 Harris 角点检测器。类似于 cornerMinEigenVal 和 cornerEigenValsAndVecs&#xff0c;对于每个像素 (…...

Apache Doris 2.1.6 版本正式发布

亲爱的社区小伙伴们&#xff0c;Apache Doris 2.1.6 版本已于 2024 年 9 月 10 日正式发布。2.1.6 版本在 Lakehouse、异步物化视图、半结构化数据管理持续升级改进&#xff0c;同时在查询优化器、执行引擎、存储管理、数据导入与导出以及权限管理等方面完成了若干修复。欢迎大…...

一些常用的 Docker 命令

一些常用的 Docker 命令 涵盖了查看镜像、启动镜像等基本操作&#xff1a; 1. 查看 Docker 镜像 列出所有本地存储的镜像&#xff1a; docker images这会显示所有已经下载到本地的镜像&#xff0c;包括仓库名、标签、镜像 ID、创建时间和大小。 2. 拉取 Docker 镜像 从 Dock…...

【机器学习】--- 自然语言推理(NLI)

引言 随着自然语言处理&#xff08;NLP&#xff09;的迅速发展&#xff0c;**自然语言推理&#xff08;Natural Language Inference, NLI&#xff09;**已成为一项重要的研究任务。它的目标是判断两个文本片段之间的逻辑关系。这一任务广泛应用于机器阅读理解、问答系统、对话…...

大话C++:第11篇 类的定义与封装

1 类的定义 在C中&#xff0c;类的定义通常使用class关键字开始&#xff0c;后面紧跟类的名称。类可以包含数据成员&#xff08;变量&#xff09;和成员函数&#xff08;方法&#xff09;。 在C中&#xff0c;类可以更加详细地展开&#xff0c;包括数据成员&#xff08;变量&…...

六种主流ETL工具的比较与Kettle的实践练习指南--MySQL、hive、hdfs等之间的数据迁移

在数据集成和数据仓库建设中&#xff0c;ETL&#xff08;Extract, Transform, Load&#xff09;工具扮演着至关重要的角色。本文将对六种主流ETL工具进行比较&#xff0c;并深入探讨Kettle的实践应用。 一、六种主流ETL工具比较 1. DataPipeline 设计及架构&#xff1a;专为…...

一天一道算法题day07

找出字符中第一个匹配的下标 题目描述 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 示例 1&#…...

电机学习-有感BLDC开环控制(六步换相)

文章目录 1. 简介2. 六步换向控制3. 机械角度和电角度4.转子位置获取5.霍尔传感器读取测试6.速度开环控制6.1 PWM设置6.2死区时间 1. 简介 BLDC的反电动势一般是梯形的反电动势&#xff0c;所以采用方波控制。如图2-1所示&#xff0c;是一个简化的内转子无刷直流电机。我们通过…...

《深度学习》PyTorch框架 优化器、激活函数讲解

目录 一、深度学习核心框架的选择 1、TensorFlow 1&#xff09;概念 2&#xff09;优缺点 2、PyTorch 1&#xff09;概念 2&#xff09;优缺点 3、Keras 1&#xff09;概念 2&#xff09;优缺点 4、Caffe 1&#xff09;概念 2&#xff09;优缺点 二、pytorch安装 1、安装 2、…...

Linux:进程(四)

目录 一、进程优先级 二、Linux调度与切换 1.背景 2.进程切换 一、进程优先级 背景&#xff1a;在计算机中&#xff0c;软硬件资源是有限的&#xff0c;而进程想要访问某一种资源&#xff0c;就得通过排队来保证访问资源的过程是有条不紊的。 Linux下对优先级的定义。执行命…...

CTC loss 博客转载

论文地址&#xff1a; https://www.cs.toronto.edu/~graves/icml_2006.pdf 为了对应这个图&#xff0c;我们假设一种符合的模型情况&#xff1a; 英文OCR&#xff0c;37个类别&#xff08;26个小写字母10个汉字空格&#xff09;&#xff0c;最大输出长度8个字符 模型预测结果…...

TryHackMe 第3天 | Pre Security (中)

该学习路径讲解了网络安全入门的必备技术知识&#xff0c;比如计算机网络、网络协议、Linux命令、Windows设置等内容。上一篇中简短介绍了计算机网络相关的知识&#xff0c;本篇博客将记录 网络协议 部分。 How the web works? DNS in detail DNS (Domain name system&…...

c语言中“qsort函数”和“结构体成员访问变量”

qsort函数&#xff1a; qsort是c语言中的库函数&#xff0c;这个函数是对数据进行排序&#xff08;对任意&#xff09; 冒泡排序中排列整数顺序用的函数只适用于整形&#xff0c;而qsort函数适用与所有数据 排序算法 冒泡排序 插入 选择 快速 void qsort{ void * base&…...

【MySQL】在MySQL中STR_TO_DATE()

1.在MySQL中STR_TO_DATE() 在MySQL中&#xff0c;STR_TO_DATE() 函数用于将字符串转换为日期格式。这个函数非常有用&#xff0c;当你需要将文本数据转换为可由MySQL日期和时间函数处理的格式时。 1.1 语法 STR_TO_DATE() 函数的基本语法如下&#xff1a; STR_TO_DATE(date…...

Scratch节日 | 六一儿童节射击游戏

六一儿童节快乐&#xff01;这款超有趣的 六一儿童节射击游戏&#xff0c;让你变身小猫弓箭手&#xff0c;守护节日的快乐时光&#xff01; &#x1f3ae; 游戏玩法 上下方向键&#xff1a;控制小猫的位置&#xff0c;自由移动&#xff0c;瞄准目标&#xff01; 空格键&#…...

从零开始的云计算生活——第十四天,困难重重,安全管理。

一故事背景 在前面的基本无操作内容后&#xff0c;来到了大头内容&#xff0c;安全管理&#xff01;其中的防火墙相关的内容更是重中之重&#xff0c;要好好掌握&#xff0c;熟练运用。 二SELinux安全上下文 1SELinux 简介 a. SELinux&#xff08;Security-Enhanced Linux&…...

MAC上怎么进入隐藏目录

在Mac上&#xff0c;由于系统保护的原因&#xff0c;一些系统目录如/usr默认是隐藏的&#xff0c;但可以通过以下方法进入&#xff1a; 方法一&#xff1a;使用Finder的“前往文件夹”功能 打开Finder。使用快捷键Command Shift G&#xff0c;或者在菜单栏中选择“前往”-“…...

AI产品风向标:从「工具属性」到「认知引擎」的架构跃迁​

近年来&#xff0c;人工智能正在改变法律行业的游戏规则。从最初的“工具属性”——帮律师干些重复的杂活儿&#xff0c;到如今逐渐变身为“认知引擎”——能够理解法律逻辑、分析案例&#xff0c;法律AI产品正在迎来一场华丽的转身。这篇文章将带你一探究竟&#xff0c;看看这…...

Rust 变量与可变性

文章目录 变量与可变性常量遮蔽&#xff08;Shadowing&#xff09; 变量与可变性 Rust中变量默认是不可变的&#xff0c;这是 Rust 鼓励你编写更安全、易于并发代码的众多方式之一。不过&#xff0c;你仍然可以选择让变量可变。让我们来探讨 Rust 为什么鼓励你优先使用不可变性…...

Spring Boot中保存前端上传的图片

在Spring Boot中保存前端上传的图片可以通过以下步骤实现&#xff1a; 1. 添加依赖 确保在pom.xml中已包含Spring Web依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifact…...

51c视觉~3D~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/13954440 #SceneTracker 在4D时空中追踪万物&#xff01;国防科大提出首个长时场景流估计方法 本篇分享 TPAMI 2025 论文​​SceneTracker: Long-term Scene Flow Estimation Network​​&#xff0c;国防科大提出首…...

Jvm 元空间大小分配原则

JVM元空间&#xff08;Metaspace&#xff09;的大小分配原则与系统物理内存密切相关&#xff0c;但并不是直接等比例分配&#xff0c;而是通过一系列参数和JVM的动态管理机制来确定。下面从原理和实际行为两方面详细说明&#xff1a; 1. 元空间&#xff08;Metaspace&#xff0…...

BiliNote部署实践

​ 开源地址&#xff1a; https://github.com/JefferyHcool/BiliNote &#x1f680; 快速开始 1. 克隆仓库 git clone https://github.com/JefferyHcool/BiliNote.git cd BiliNote mv .env.example .env2. 启动后端&#xff08;FastAPI&#xff09; cd backend pip insta…...

Mysql数据库 索引,事务

Mysql数据库 索引&#xff0c;事务 一.索引 简介 索引是数据库中用于提高查询效率的一种数据结构&#xff0c;它通过预先排序和存储特定列的值&#xff0c;帮助数据库快速定位符合条件的数据行&#xff0c;避免全表扫描。以下是关于索引的核心简介&#xff1a; 1. 核心作用…...