WPF基础 | 初探 WPF:理解其核心架构与开发环境搭建

在这里插入图片描述
在这里插入图片描述

WPF基础 | 初探 WPF:理解其核心架构与开发环境搭建

  • 一、前言
  • 二、WPF 核心架构
    • 2.1 核心组件
    • 2.2 布局系统
    • 2.3 数据绑定机制
    • 2.4 事件处理机制
  • 三、WPF 开发环境搭建
    • 3.1 安装 Visual Studio
    • 3.2 创建第一个 WPF 应用程序
  • 结束语
  • 优质源码分享

WPF基础 | 初探 WPF:理解其核心架构与开发环境搭建, 本文旨在深入探讨 Windows Presentation Foundation(WPF),首先介绍 WPF 的基本概念及其在微软技术生态中的地位,随后详细剖析其核心架构,包括核心组件、布局系统、数据绑定机制、事件处理机制等方面。接着阐述 WPF 开发环境的搭建过程,从安装必要软件到创建第一个简单的 WPF 应用程序都进行了细致说明。通过对 WPF 核心架构的理解和开发环境搭建的掌握,为进一步深入学习和应用 WPF 技术奠定坚实基础,帮助开发人员更好地利用 WPF 构建功能强大、界面美观的 Windows 应用程序。

一、前言

    在数字浪潮汹涌澎湃的时代,程序开发宛如一座神秘而宏伟的魔法城堡,矗立在科技的浩瀚星空中。代码的字符,似那闪烁的星辰,按照特定的轨迹与节奏,组合、交织、碰撞,即将开启一场奇妙且充满无限可能的创造之旅。当空白的文档界面如同深邃的宇宙等待探索,程序员们则化身无畏的星辰开拓者,指尖在键盘上轻舞,准备用智慧与逻辑编织出足以改变世界运行规则的程序画卷,在 0 和 1 的二进制世界里,镌刻下属于人类创新与突破的不朽印记。

    在当今的软件开发领域,用户界面(UI)设计的重要性日益凸显。Windows 应用程序需要提供丰富、交互性强且美观的界面以吸引用户并提升用户体验。传统的 Windows 开发技术在应对复杂 UI 需求时逐渐暴露出一些局限性,如界面设计与逻辑代码的高度耦合、对图形处理能力有限等。在此背景下,微软推出了 Windows Presentation Foundation(WPF)。

    WPF 是微软.NET 框架下用于构建 Windows 客户端应用程序的强大技术。它将用户界面、媒体和文档整合到一个统一的编程模型中,提供了丰富的功能集,涵盖了从基本的 UI 布局到高级的图形渲染、动画效果以及数据绑定等多个方面。无论是开发企业级的业务应用程序,还是面向消费者的多媒体应用,WPF 都展现出了卓越的适应性和强大的表现力,成为 Windows 应用程序开发的重要选择之一。

    WPF从入门到精通专栏,旨在为读者呈现一条从对 WPF(Windows Presentation Foundation)技术懵懂无知到精通掌握的学习路径。首先从基础入手,介绍 WPF 的核心概念,涵盖其独特的架构特点、开发环境搭建流程,详细解读布局系统、常用控件以及事件机制等基础知识,帮助初学者搭建起对 WPF 整体的初步认知框架。随着学习的深入,进阶部分聚焦于数据绑定、样式模板、动画特效等关键知识点,进一步拓展 WPF 开发的能力边界,使开发者能够打造出更为个性化、交互性强的桌面应用界面。高级阶段则涉及自定义控件开发、MVVM 设计模式应用、多线程编程等深层次内容,助力开发者应对复杂的业务需求,构建大型且可维护的应用架构。同时,通过实战项目案例解析,展示如何将所学知识综合运用到实际开发中,从需求分析到功能实现再到优化测试,全方位积累实践经验。此外,还探讨了性能优化、与其他技术集成以及安全机制等拓展性话题,让读者对 WPF 技术在不同维度有更深入理解,最终实现对 WPF 技术的精通掌握,具备独立开发高质量桌面应用的能力。

🛕 点击进入WPF从入门到精通专栏

在这里插入图片描述

二、WPF 核心架构

2.1 核心组件

  • PresentationCore

    PresentationCore 是 WPF 架构的基础组件之一。它主要负责处理 WPF 应用程序中的核心呈现相关功能,包括图形渲染、可视化树的构建与管理等。它定义了基本的视觉元素类型,如形状(Shape)、画笔(Brush)等,并且提供了与底层图形系统交互的接口。例如,当在 WPF 中绘制一个矩形时,PresentationCore 负责将矩形的几何形状信息传递给图形系统进行绘制,并处理诸如裁剪、透明度等视觉效果的计算与应用。

    它还包含了对文本渲染的支持,确保在 WPF 应用程序中的文字能够以高质量、清晰的方式显示。这涉及到字体选择、文字排版、文本抗锯齿等多方面的处理,为创建富文本内容的用户界面提供了坚实的基础。

  • PresentationFramework

PresentationFramework 构建在 PresentationCore 之上,是 WPF 应用程序开发中直接使用最多的组件。它提供了一系列高级的 UI 功能,如窗口(Window)、页面(Page)、控件(Control)等的定义与实现。这些预定义的 UI 元素使得开发人员可以快速构建应用程序的界面结构。例如,通过简单地实例化一个 Window 类并设置其属性,就可以创建一个基本的应用程序主窗口。

    此外,PresentationFramework 还实现了 WPF 的事件路由机制、数据绑定引擎以及命令系统等重要功能。事件路由机制允许在 WPF 应用程序中以灵活的方式处理事件,例如可以在父元素中统一处理子元素的某些事件,提高了代码的复用性和可维护性。数据绑定引擎则是 WPF 的核心特色之一,它能够方便地在 UI 元素和数据对象之间建立绑定关系,实现数据的自动更新与同步显示,大大简化了数据驱动 UI 开发的复杂性。命令系统则为处理用户交互操作提供了一种解耦的方式,将操作逻辑与具体的 UI 元素触发分离,便于代码的组织与管理。

  • WindowsBase

    WindowsBase 组件提供了一些基本的基础设施服务,如依赖属性系统、路由事件系统的基础实现等。依赖属性是 WPF 中一种特殊的属性类型,它支持属性值的继承、数据绑定、动画等高级特性。例如,一个控件的字体属性可以被设置为依赖属性,这样当父元素的字体属性发生变化时,子元素的字体属性可以自动继承该变化,无需额外的代码处理。

    路由事件系统基于 WindowsBase 中的基础实现构建了完整的事件路由机制,使得事件能够在 WPF 元素树中进行冒泡或隧道传播,方便开发人员处理复杂的事件交互场景。同时,WindowsBase 还提供了与线程、资源管理等相关的一些基本功能,为整个 WPF 应用程序的稳定运行提供了保障。

2.2 布局系统

  • 布局原理

    WPF 的布局系统基于容器和子元素的概念。容器负责确定其子元素的位置和大小,而子元素则向容器提供自身的布局需求信息。布局过程是一个递归的过程,从根元素开始,依次遍历整个元素树。例如,在一个典型的 WPF 窗口中,窗口是根容器,它内部可能包含一个网格(Grid)布局面板,网格面板又包含多个按钮、文本框等子元素。

    在布局过程中,容器首先会根据自身的布局规则对子元素进行测量。测量过程中子元素会返回其期望的大小,这个大小通常是基于其内容、样式设置以及自身的布局约束等因素确定的。例如,一个文本框可能根据其文本内容的长度和字体大小确定其期望的宽度和高度。然后容器会根据自身的布局策略对这些测量结果进行整理和计算,确定每个子元素最终的位置和大小。例如,网格布局面板会根据其定义的行和列的设置,将子元素放置在相应的网格单元中,并调整其大小以适应网格单元的尺寸。

  • 常见布局面板

    Grid:Grid 是 WPF 中最常用的布局面板之一。它通过定义行和列来组织子元素,可以灵活地实现复杂的布局结构。开发人员可以指定行和列的大小,可以是固定值、比例值或者自动适应内容的值。例如,在一个数据录入界面中,可以使用 Grid 将标签和文本框分别放置在不同的列中,并且可以根据需要调整列的宽度比例,使界面布局更加美观和合理。

    StackPanel:StackPanel 按照水平或垂直方向依次堆叠其子元素。当子元素添加到 StackPanel 中时,它们会按照设定的方向依次排列。例如,在一个导航菜单的实现中,可以使用垂直方向的 StackPanel 将菜单项依次堆叠,方便用户进行选择操作。

    Canvas:Canvas 提供了绝对定位的布局方式。开发人员可以精确地指定子元素在 Canvas 中的坐标位置。这种布局方式适用于需要精确控制元素位置的场景,如绘制图形、创建自定义的可视化界面等。例如,在一个简单的图形绘制应用程序中,可以使用 Canvas 来放置各种形状元素,并通过指定坐标来确定它们的位置和相互关系。

2.3 数据绑定机制

  • 数据绑定基础

    数据绑定是 WPF 的核心特性之一,它允许在 UI 元素和数据对象之间建立一种连接关系,使得数据的变化能够自动反映在 UI 上,同时 UI 元素的状态改变也能更新数据对象。数据绑定的基本组成部分包括绑定源、绑定目标和绑定表达式。绑定源是数据的提供者,可以是各种数据对象,如普通的.NET 对象、集合、数据库查询结果等。例如,一个包含用户信息的自定义类对象可以作为绑定源。

    绑定目标则是 UI 元素的某个属性,如文本框的 Text 属性、按钮的 IsEnabled 属性等。绑定表达式则定义了绑定源和绑定目标之间的绑定关系,包括绑定的路径(即如何从绑定源获取数据)、绑定的模式(如单向绑定、双向绑定等)等信息。例如,在一个显示用户姓名的文本框中,绑定表达式可以指定将文本框的 Text 属性绑定到用户对象的 Name 属性上,并且采用单向绑定模式,即当用户对象的 Name 属性发生变化时,文本框的 Text 属性会自动更新。

  • 数据转换与验证

    WPF 的数据绑定机制还支持数据转换和验证功能。数据转换可以在数据从绑定源传输到绑定目标或者反之的过程中对数据进行格式转换。例如,可以定义一个数据转换器将一个日期类型的数据转换为特定格式的字符串以便在文本框中显示,或者将用户输入的字符串转换为相应的数据类型进行数据更新。

    数据验证则用于确保用户输入的数据符合特定的要求。可以在绑定表达式中指定验证规则,当用户输入的数据不符合规则时,WPF 会自动提供反馈信息,如显示错误提示框或者改变 UI 元素的外观以提示用户输入错误。例如,在一个年龄输入文本框中,可以定义一个验证规则确保输入的年龄是一个有效的数值且在合理的范围内。

2.4 事件处理机制

  • 路由事件概述

    WPF 采用路由事件机制来处理事件。路由事件与传统的.NET 事件不同,它可以在元素树中进行传播。路由事件有两种传播方式:冒泡和隧道。冒泡事件是从事件源开始,沿着元素树向上传播,即从子元素向父元素传播。例如,当点击一个按钮时,按钮的 Click 事件会先在按钮自身触发,然后依次向上传播到按钮所在的容器、窗口等父元素。

    隧道事件则是从元素树的根元素开始,沿着元素树向下传播到事件源。隧道事件通常用于预览事件,例如在一个窗口中,可以在窗口级别处理鼠标按下的隧道事件,以便在事件到达具体的子元素之前进行一些全局的处理,如判断是否满足某些条件才允许事件继续向下传播到子元素进行具体的处理。

  • 事件处理的实现

    在 WPF 中,事件处理可以通过在 XAML 中声明事件处理程序或者在代码后置文件中编写事件处理方法来实现。在 XAML 中声明事件处理程序时,只需指定事件名称和对应的事件处理方法名称即可。例如,对于一个按钮的 Click 事件,可以在 XAML 中这样声明:<Button Click="Button_Click">Click Me</Button>,其中 “Button_Click” 是在代码后置文件中定义的事件处理方法。在代码后置文件中,事件处理方法需要遵循特定的签名格式,如对于按钮的 Click 事件处理方法,其签名通常为private void Button_Click(object sender, RoutedEventArgs e),其中“sender” 表示事件源对象,“e” 表示事件参数,包含了关于事件的详细信息,如事件发生的位置、鼠标按键状态等。

三、WPF 开发环境搭建

3.1 安装 Visual Studio

  • 系统要求

    在安装 Visual Studio 之前,需要确保计算机满足一定的系统要求。对于不同版本的 Visual Studio,系统要求会有所不同。一般来说,需要一定的处理器性能,如至少 1.8 GHz 或更快的处理器(对于某些高级功能可能需要更高性能的处理器)。内存方面,建议至少 2GB 的 RAM,对于大型项目开发或同时运行多个实例时,可能需要更多内存,如 4GB 或 8GB 以上。磁盘空间也有要求,Visual Studio 安装程序本身以及后续开发过程中可能会占用大量磁盘空间,一般需要几十 GB 的可用磁盘空间,具体取决于安装的组件和版本。操作系统方面,支持 Windows 7 及以上版本的 Windows 操作系统,但不同版本的 Visual Studio 对不同 Windows 版本的支持细节可能存在差异。

  • 安装步骤

    首先,从微软官方网站下载 Visual Studio 的安装程序。在下载页面,可以根据自己的需求选择不同的版本,如 Visual Studio Community(免费供个人和小型团队使用)、Visual Studio ProfessionalVisual Studio Enterprise 等。下载完成后,运行安装程序。

    安装程序启动后,会出现安装向导界面。在这个界面中,可以选择安装的工作负载。对于 WPF 开发,需要选择 “.NET 桌面开发” 工作负载。这个工作负载包含了开发 WPF 应用程序所需的基本组件,如 WPF 设计器、.NET 框架开发工具等。同时,还可以根据自己的需求选择其他相关的工作负载或单个组件,如版本控制系统集成(如 Git)、测试工具等。

    选择完工作负载后,点击 “安装” 按钮,安装程序就会开始下载并安装所选的组件。安装过程可能需要一段时间,具体取决于计算机的性能和网络速度。安装完成后,会提示安装成功,可以启动 Visual Studio

3.2 创建第一个 WPF 应用程序

  • 创建项目

    启动 Visual Studio 后,选择 “创建新项目”。在项目模板列表中,选择 “WPF 应用程序(.NET Framework)”。然后指定项目的名称、位置等基本信息,点击 “确定” 按钮,Visual Studio 就会创建一个基本的 WPF 应用程序项目结构。

  • 项目结构分析

    一个典型的 WPF 应用程序项目包含多个文件和文件夹。其中,“App.xaml”“App.xaml.cs” 文件用于定义应用程序的全局资源、启动窗口等信息。“MainWindow.xaml”“MainWindow.xaml.cs” 文件是应用程序的主窗口相关文件,“MainWindow.xaml” 用于定义主窗口的 UI 布局,采用 XAML 语言编写,而 “MainWindow.xaml.cs” 则是主窗口的代码后置文件,用于处理主窗口的逻辑代码,如事件处理、数据初始化等。此外,项目中还可能包含 “Properties” 文件夹,其中存放着项目的属性设置文件,如程序集信息、资源文件引用等。还有 “obj” 和 “bin” 文件夹,分别用于存放编译过程中的中间文件和最终生成的可执行文件及相关依赖文件。

  • 编写简单的 UI 与逻辑代码

“MainWindow.xaml” 文件中,可以开始设计主窗口的 UI。例如,可以添加一个按钮和一个文本框,如下所示:

<Window x:Class="WpfApp1.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="My First WPF App" Height="350" Width="525"><Grid><Button x:Name="MyButton" Content="Click Me" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,10,0,0"/><TextBox x:Name="MyTextBox" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,50,0,0" Width="200"/></Grid>
</Window>

    然后在 “MainWindow.xaml.cs” 文件中,可以为按钮添加 Click 事件处理代码,例如:

using System;
using System.Windows;namespace WpfApp1
{public partial class MainWindow : Window{public MainWindow(){InitializeComponent();MyButton.Click += MyButton_Click;}private void MyButton_Click(object sender, RoutedEventArgs e){MyTextBox.Text = "按钮单击!";}}
}

    这样,当运行应用程序并点击按钮时,文本框中就会显示 “按钮单击!”。

结束语

        通过对 WPF 核心架构的深入理解,包括其核心组件、布局系统、数据绑定机制和事件处理机制等方面,以及掌握 WPF 开发环境的搭建过程,从安装 Visual Studio 到创建第一个简单的 WPF 应用程序,开发人员已经迈出了学习 WPF 技术的重要一步。WPF 凭借其强大的功能和灵活的架构,为开发高质量的 Windows 应用程序提供了广阔的空间。在后续的学习和实践中,可以进一步探索 WPF 的高级特性,如动画效果、自定义控件开发、与其他技术的集成等,从而能够更好地利用 WPF 构建出功能丰富、界面精美的 Windows 应用程序,满足不同用户和业务场景的需求,提升 Windows 应用程序在软件市场中的竞争力。无论是对于企业级应用开发还是面向消费者的软件产品开发,WPF 都具有不可忽视的价值和潜力,值得深入研究与应用。

        在开发过程中,遵循 MVVM 设计模式和合理使用资源字典等最佳实践,可以使代码结构更加清晰、易于维护和扩展,提高开发团队的协作效率。同时,了解并掌握数据绑定不生效、布局异常等常见问题的解决方法,能够帮助开发人员快速排除故障,减少开发时间和成本。

        无论是开发简单的工具类应用程序,还是复杂的企业级桌面软件,WPF 都能够满足各种需求,并能够与其他微软技术如 WCF、Entity Framework 等无缝集成,进一步拓展了其应用范围和功能深度。随着技术的不断发展和应用场景的不断拓展,WPF 将继续在桌面应用开发领域发挥重要作用,为用户带来更加优质的桌面应用体验。对于希望深入学习桌面应用开发的读者来说,WPF 无疑是一个值得深入探索和掌握的技术框架,它将为个人的技术成长和职业发展提供坚实的基础和广阔的空间。

        亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。

         愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。

        至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。


--------------- 业精于勤,荒于嬉 ---------------

请添加图片描述

--------------- 行成于思,毁于随 ---------------

优质源码分享

  • 【百篇源码模板】html5各行各业官网模板源码下载

  • 【模板源码】html实现酷炫美观的可视化大屏(十种风格示例,附源码)

  • 【VUE系列】VUE3实现个人网站模板源码

  • 【HTML源码】HTML5小游戏源码

  • 【C#实战案例】C# Winform贪吃蛇小游戏源码


在这里插入图片描述


     💞 关注博主 带你实现畅游前后端

     🏰 大屏可视化 带你体验酷炫大屏

     💯 神秘个人简介 带你体验不一样得介绍

     🎀 酷炫邀请函 带你体验高大上得邀请


     ① 🉑提供云服务部署(有自己的阿里云);
     ② 🉑提供前端、后端、应用程序、H5、小程序、公众号等相关业务;
     如🈶合作请联系我,期待您的联系。
    :本文撰写于CSDN平台,作者:xcLeigh所有权归作者所有) ,https://blog.csdn.net/weixin_43151418,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。


     亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(评论),博主看见后一定及时给您答复,💌💌💌


原文地址:https://blog.csdn.net/weixin_43151418/article/details/144660532(防止抄袭,原文地址不可删除)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/7058.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(算法竞赛)使用广度优先搜索(BFS)解决迷宫最短路径问题

在这个充满奇思妙想的世界里&#xff0c;每一次探索都像是打开了一扇通往新世界的大门。今天&#xff0c;我们将踏上一段特别的旅程&#xff0c;去揭开那些隐藏在代码、算法、数学谜题或生活智慧背后的秘密。&#x1f389;&#x1f60a; 所以&#xff0c;系好安全带&#xff0…

总线、UART、IIC、SPI

一图流 总线 概念 连接多个部件的信息传输线&#xff0c;是各部件共享的传输介质 类型 片内总线&#xff1a;连接处理器内核和外设的总线&#xff0c;在芯片内部 片外总线&#xff1a;连接芯片和其他芯片或者模块的总线 总线的通信 总线通信的方式 串行通信 数据按位顺序传…

CLion开发Qt桌面

IDE&#xff1a;CLion Qt Qt版本&#xff1a;5.12 学习正点原子的嵌入式Linux开发板时&#xff0c;使用Qt Creator写代码不是很方便&#xff0c;遂尝试使用CLion搭建Qt开发环境。 一、CLion的Qt环境搭建 1&#xff0c;配置工具链 找到Qt的安装目录&#xff0c;此处为E:\Tools\…

一部手机如何配置内网电脑同时访问内外网

做过运维的朋友都知道&#xff0c;最麻烦的是运维电脑不能远程&#xff0c;每次都得现场进行维护&#xff0c;明明客户那边有可以访问内网的电脑&#xff0c;怎么操作能将这台电脑能访问跟到外网呢&#xff0c;这样不就能通过远程软件远程了吗&#xff1f;嘿嘿。按以下步骤试试…

【深度学习】搭建PyTorch神经网络进行气温预测

第一步 数据加载与观察 ①导包 import numpy as np import pandas as pd import matplotlib.pyplot as plt import torch import torch.optim as optim import warnings warnings.filterwarnings("ignore") %matplotlib inline ②加载数据 features pd.read_csv(…

MyBatis优化及高级查询

一、MyBatis优化 1.配置文件属性 MyBatis可以将数据库配置单独放在一个properties文件中。如创建一个db.properties文件&#xff0c;内容如下&#xff1a; divercom.mysql.jdbc.Driverurljdbc:mysql://localhost:3306/mybatisusernamerootpassword123 接下来在配置文件中&a…

衡量算法性能的量级标准:算法复杂度

今天开始数据结构的学习&#xff01;作为一大重点&#xff0c;拿出态度很重要&#xff0c;想要真实掌握&#xff0c;博客笔记自然少不了&#xff01;重点全部上色&#xff01;避免疏忽 下面我们从0基础开始学习今天的第一节&#xff01;不用担心看不懂&#xff0c;拒绝枯燥的理…

【知识图谱(2)】电影知识图谱构建

本文的主线思路 一共六个板块&#xff1a; #mermaid-svg-fekG4TP2IHz9vlmg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-fekG4TP2IHz9vlmg .error-icon{fill:#552222;}#mermaid-svg-fekG4TP2IHz9vlmg .error-tex…

单值二叉树(C语言详解版)

一、摘要 今天要讲的是leetcode单值二叉树&#xff0c;这里用到的C语言&#xff0c;主要提供的是思路&#xff0c;大家看了我的思路之后可以点击链接自己试一下。 二、题目简介 如果二叉树每个节点都具有相同的值&#xff0c;那么该二叉树就是单值二叉树。 只有给定的树是单…

在Spring Boot中使用SeeEmitter类实现EventStream流式编程将实时事件推送至客户端

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

基于本地事务表+MQ实现分布式事务

基于本地事务表MQ实现分布式事务 引言1、原理2、本地消息表优缺点3、本地启动rocketmq4、代码实现及验证4.1、核心代码4.2、代码执行流程4.3、项目结构4.4、项目源码 引言 本地消息表的方案最初由ebay的工程师提出&#xff0c;核心思想是将分布式事务拆分成本地事务进行处理。…

Chrome插件:图片缩放为头像(128*128)

前置条件&#xff1a; 安装有chrome谷歌浏览器的电脑 使用步骤&#xff1a; 1.打开chrome扩展插件 2.点击管理扩展程序 3.加载已解压的扩展程序 4.选择对应文件夹 5.成功后会出现一个扩展小程序 6.点击对应小程序 7.使用小程序 8.拖拽成功后会自动保存到下载 代码&#xf…

idea maven本地有jar包,但还要从远程下载

idea 中&#xff0c;java 工程执行 maven reimport&#xff0c;报jar报无法下载。 我奇了个怪&#xff0c;我明明在本地仓库有啊&#xff0c;你非得从远程下载&#xff1f; 我从供应商那里拿来的&#xff0c;远程当然没有了。 这太奇葩了吧&#xff0c;折腾好久不行。 后来…

HTML<label>标签

例子 三个带标签的单选按钮&#xff1a; <form action"/action_page.php"> <input type"radio" id"html" name"fav_language" value"HTML"> <label for"html">HTML</label><br&…

【数据结构】_不带头非循环单向链表

目录 1. 链表的概念及结构 2. 链表的分类 3. 单链表的实现 3.1 SList.h头文件 3.2 SList.c源文件 3.3 Test_SList.c测试文件 关于线性表&#xff0c;已介绍顺序表&#xff0c;详见下文&#xff1a; 【数据结构】_顺序表-CSDN博客 本文介绍链表&#xff1b; 基于顺序表…

算法刷题笔记——图论篇

这里写目录标题 理论基础图的基本概念图的种类度 连通性连通图强连通图连通分量强连通分量 图的构造邻接矩阵邻接表 图的遍历方式 深度优先搜索理论基础dfs 与 bfs 区别dfs 搜索过程深搜三部曲所有可达路径广度优先搜索理论基础广搜的使用场景广搜的过程 岛屿数量孤岛的总面积沉…

“AI视觉贴装系统:智能贴装,精准无忧

嘿&#xff0c;朋友们&#xff01;今天我要跟你们聊聊一个特别厉害的技术——AI视觉贴装系统。这可不是普通的贴装设备&#xff0c;它可是融合了人工智能、计算机视觉和自动化控制等前沿科技的“智能贴装大师”。有了它&#xff0c;那些繁琐、复杂的贴装工作变得轻松又精准。来…

vim如何设置显示空白符

:set list 显示空白符 示例&#xff1a; :set nolist 不显示空白符 示例&#xff1a; &#xff08;vim如何使设置显示空白符永久生效&#xff1a;vim如何使相关设置永久生效-CSDN博客&#xff09;

Flutter android debug 编译报错问题。插件编译报错

下面相关内容 都以 Mac 电脑为例子。 一、问题 起因&#xff1a;&#xff08;更新 Android studio 2024.2.2.13、 Flutter SDK 3.27.2&#xff09; 最近 2025年 1 月 左右&#xff0c;我更新了 Android studio 和 Flutter SDK 再运行就会出现下面的问题。当然 下面的提示只是其…

AI导航工具我开源了利用node爬取了几百条数据

序言 别因今天的懒惰&#xff0c;让明天的您后悔。输出文章的本意并不是为了得到赞美&#xff0c;而是为了让自己能够学会总结思考&#xff1b;当然&#xff0c;如果有幸能够给到你一点点灵感或者思考&#xff0c;那么我这篇文章的意义将无限放大。 背景 随着AI的发展市面上…