WPF-UI HandyControl 控件简单实战

文章目录

  • 前言
  • UserControl简单使用
  • 新建项目
  • 直接新建项目
    • 初始化UserControl
    • Geometry:矢量图形
      • 额外Icon导入
        • 最优解决方案
    • 按钮Button
      • 切换按钮ToggleButton
        • 默认按钮
        • 图片可切换按钮
        • 加载按钮
        • 切换按钮
      • 单选按钮和复选按钮没有太大特点,就不展开写了
      • 总结
    • DataGrid数据表格
    • Growl消息提示
  • 结论

前言

因为HandyControl 的功能非常的丰富,我打算完整的了解一下HandyControl 整个控件的基本使用,而且我的网易云WPF项目也打算用UserControl 进行重构

UserControl简单使用

WPF-UI HandyControl 简单介绍

HandyControl Visual Studio 插件

HandyControl Github地址

HandyControl 官方中文文档

HandyControl 实战Gitee仓库

新建项目

我们下载了HandyControl 插件之后,就可以使用HandyControl模板开始项目。
在这里插入图片描述
但是根据我的测试,第一这个HandyControl的.Net 版本都是.Net Core 5.0的。而且用起来还是不太舒服

直接新建项目

在这里插入图片描述

App.Xaml

<Application x:Class="WpfApp1.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WpfApp1"
             xmlns:hc="https://handyorg.github.io/handycontrol"
             xmlns:icon="http://metro.mahapps.com/winfx/xaml/iconpacks"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml" />
                <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/Theme.xaml" />

            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

初始化UserControl

在这里插入图片描述
MainWindow

   <Grid>

       <TabControl  Style="{StaticResource TabControlInLine}"
                   x:Name="MyTable">
           <!--通过设置Collapsed来完全折叠TabItem-->
           <TabItem Header="A">
               <View:ViewA />
           </TabItem>
           <TabItem Header="B">
               <View:ViewB />

           </TabItem>

           <TabItem Header="C">
               <View:ViewC />

           </TabItem>
       </TabControl>
   </Grid>

接下来我会对HandyControl的特色控件进行实战。比如别的UI库没有实现的

Geometry:矢量图形

HandyControl对常用的矢量图形进行了封装
在这里插入图片描述

额外Icon导入

毕竟默认的Icon比较少,而且按照作者的意思,他不希望把HandyControl写的太臃肿。

How to convert a PackIconMarkup to a Geometry object? #256

这里用到了我们之前的矢量图

WPF Icon矢量库 MahApps.Metro.IconPacks

在Resource中添加

<Geometry x:Key="MyTest">矢量代码</Geometry>

然后在IconPacks Browser里面搜索对应的Data
在这里插入图片描述

在这里插入图片描述
我暂时没找到更好的方法,去直接转换。应该是通过某种方法直接拿到里面全部的Geometry数据

    <UserControl.Resources>
    <!--定义数据,这个是直接拿到的矢量数据-->
        <Geometry x:Key="MyTest">M20 12V7H22V13H20M20 17H22V15H20M10 13C12.67 13 18 14.34 18 17V20H2V17C2 14.34 7.33 13 10 13M10 4A4 4 0 0 1 14 8A4 4 0 0 1 10 12A4 4 0 0 1 6 8A4 4 0 0 1 10 4M10 14.9C7.03 14.9 3.9 16.36 3.9 17V18.1H16.1V17C16.1 16.36 12.97 14.9 10 14.9M10 5.9A2.1 2.1 0 0 0 7.9 8A2.1 2.1 0 0 0 10 10.1A2.1 2.1 0 0 0 12.1 8A2.1 2.1 0 0 0 10 5.9Z</Geometry>

    </UserControl.Resources>
    ......其它代码
    <Button IsEnabled="False"
        Margin="5"
        Content="Test"
        hc:BorderElement.CornerRadius="10"
        hc:IconElement.Geometry="{StaticResource MyTest}" />

效果
在这里插入图片描述

最优解决方案

自己新建一个字典:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

<Application x:Class="WpfApp1.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WpfApp1"
             xmlns:hc="https://handyorg.github.io/handycontrol"
             xmlns:icon="http://metro.mahapps.com/winfx/xaml/iconpacks"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml" />
                <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/Theme.xaml" />
                <!--这个是你自己的扩展Geometry字典-->
                <ResourceDictionary Source="/WpfApp1;component/Style/IconPacksGeometry.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

按钮Button

HandyControl 对Button进行了扩展,改造成了图标按钮。默认Icon在左,文本在右。而且添加了一些扩展属性,可以直接进行修改。

  • hc:HandyControl
  • IconElement:图标扩展
    • Geometry:矢量图标
    • Width:宽度
    • Heigth:高度
  • BorderElement:边框扩展
<Button IsEnabled="False"
                Margin="5"
                Content="Test"
                hc:BorderElement.CornerRadius="10"
                hc:IconElement.Geometry="{StaticResource UpDownGeometry}" />

在这里插入图片描述

切换按钮ToggleButton

默认是没有带切换功能的,不太了解,如果你使用的是Default按钮,是不能进行切换的

默认按钮
        <ToggleButton Margin="5"
                      Content="内容"
                      Style="{StaticResource ToggleButtonDefault}"
                      hc:IconSwitchElement.Geometry="{StaticResource LeftGeometry}"
                      hc:IconSwitchElement.GeometrySelected="{StaticResource RightGeometry}" />

按钮点击无反应
在这里插入图片描述

图片可切换按钮

如果使用可翻转按钮,Content就无效了,这个我不太理解为什么要无效。
这里的Geometry可以用我之前的直接导入法替换Icon

        <Geometry x:Key="Material.AccountCog">M10 4A4 4 0 0 0 6 8A4 4 0 0 0 10 12A4 4 0 0 0 14 8A4 4 0 0 0 10 4M17 12C16.87 12 16.76 12.09 16.74 12.21L16.55 13.53C16.25 13.66 15.96 13.82 15.7 14L14.46 13.5C14.35 13.5 14.22 13.5 14.15 13.63L13.15 15.36C13.09 15.47 13.11 15.6 13.21 15.68L14.27 16.5C14.25 16.67 14.24 16.83 14.24 17C14.24 17.17 14.25 17.33 14.27 17.5L13.21 18.32C13.12 18.4 13.09 18.53 13.15 18.64L14.15 20.37C14.21 20.5 14.34 20.5 14.46 20.5L15.7 20C15.96 20.18 16.24 20.35 16.55 20.47L16.74 21.79C16.76 21.91 16.86 22 17 22H19C19.11 22 19.22 21.91 19.24 21.79L19.43 20.47C19.73 20.34 20 20.18 20.27 20L21.5 20.5C21.63 20.5 21.76 20.5 21.83 20.37L22.83 18.64C22.89 18.53 22.86 18.4 22.77 18.32L21.7 17.5C21.72 17.33 21.74 17.17 21.74 17C21.74 16.83 21.73 16.67 21.7 16.5L22.76 15.68C22.85 15.6 22.88 15.47 22.82 15.36L21.82 13.63C21.76 13.5 21.63 13.5 21.5 13.5L20.27 14C20 13.82 19.73 13.65 19.42 13.53L19.23 12.21C19.22 12.09 19.11 12 19 12H17M10 14C5.58 14 2 15.79 2 18V20H11.68A7 7 0 0 1 11 17A7 7 0 0 1 11.64 14.09C11.11 14.03 10.56 14 10 14M18 15.5C18.83 15.5 19.5 16.17 19.5 17C19.5 17.83 18.83 18.5 18 18.5C17.16 18.5 16.5 17.83 16.5 17C16.5 16.17 17.17 15.5 18 15.5Z</Geometry>
        <Geometry x:Key="Material.AccountCogOutline">M10 4A4 4 0 0 0 6 8A4 4 0 0 0 10 12A4 4 0 0 0 14 8A4 4 0 0 0 10 4M10 6A2 2 0 0 1 12 8A2 2 0 0 1 10 10A2 2 0 0 1 8 8A2 2 0 0 1 10 6M17 12C16.84 12 16.76 12.08 16.76 12.24L16.5 13.5C16.28 13.68 15.96 13.84 15.72 14L14.44 13.5C14.36 13.5 14.2 13.5 14.12 13.6L13.16 15.36C13.08 15.44 13.08 15.6 13.24 15.68L14.28 16.5V17.5L13.24 18.32C13.16 18.4 13.08 18.56 13.16 18.64L14.12 20.4C14.2 20.5 14.36 20.5 14.44 20.5L15.72 20C15.96 20.16 16.28 20.32 16.5 20.5L16.76 21.76C16.76 21.92 16.84 22 17 22H19C19.08 22 19.24 21.92 19.24 21.76L19.4 20.5C19.72 20.32 20.04 20.16 20.28 20L21.5 20.5C21.64 20.5 21.8 20.5 21.8 20.4L22.84 18.64C22.92 18.56 22.84 18.4 22.76 18.32L21.72 17.5V16.5L22.76 15.68C22.84 15.6 22.92 15.44 22.84 15.36L21.8 13.6C21.8 13.5 21.64 13.5 21.5 13.5L20.28 14C20.04 13.84 19.72 13.68 19.4 13.5L19.24 12.24C19.24 12.08 19.08 12 19 12H17M10 13C7.33 13 2 14.33 2 17V20H11.67C11.39 19.41 11.19 18.77 11.09 18.1H3.9V17C3.9 16.36 7.03 14.9 10 14.9C10.43 14.9 10.87 14.94 11.3 15C11.5 14.36 11.77 13.76 12.12 13.21C11.34 13.08 10.6 13 10 13M18.04 15.5C18.84 15.5 19.5 16.16 19.5 17.04C19.5 17.84 18.84 18.5 18.04 18.5C17.16 18.5 16.5 17.84 16.5 17.04C16.5 16.16 17.16 15.5 18.04 15.5Z</Geometry>

......其它代码
 <ToggleButton Margin="5"
               Content="内容"
               Style="{StaticResource ToggleButtonIconInfo}"
               hc:IconSwitchElement.Geometry="{StaticResource LeftGeometry}"
               hc:IconSwitchElement.GeometrySelected="{StaticResource RightGeometry}" />

 <ToggleButton Margin="5"
               Content="内容"
               Style="{StaticResource ToggleButtonIconDanger}"
               hc:IconSwitchElement.Geometry="{StaticResource Material.AccountCog}"
               hc:IconSwitchElement.GeometrySelected="{StaticResource Material.AccountCogOutline}" />

在这里插入图片描述

加载按钮

添加LoadingStyle会将Icon的效果无效

        <ToggleButton Margin="5"
                      Content="内容"
                      Style="{StaticResource ToggleButtonLoadingInfo}"
                      hc:IconSwitchElement.Geometry="{StaticResource Material.AccountCog}"
                      hc:IconSwitchElement.GeometrySelected="{StaticResource Material.AccountCogOutline}" />

在这里插入图片描述

切换按钮

大小有点小,用的时候要放大点

        <ToggleButton Margin="5"
                      Content="内容"
                      FontSize="20"
                      Style="{StaticResource ToggleButtonSwitch}"
                      hc:IconSwitchElement.Geometry="{StaticResource Material.AccountCog}"
                      hc:IconSwitchElement.GeometrySelected="{StaticResource Material.AccountCogOutline}" />

在这里插入图片描述

单选按钮和复选按钮没有太大特点,就不展开写了

总结

HandyControl非常的好用,而且能进行自定义拓展,这里就不展开了。尤其是有了导入其它Icon的Geometry的能力之后,基本所有的图标都可以轻松拿下。

DataGrid数据表格

这里我们就用最简单的自动生成,看看效果
测试类

    public class TemplateDate
    {
        public string Name { get; set; }

        public int Age { get; set; }

        public long Phone { get; set; }

        public enum SexEnum {,, 保密 }

        public SexEnum Sex { get; set; }
    }

ViewModel绑定

    public class ViewBViewModel
    {
        public List<TemplateDate> TemplateDates { get; set; }
        public ViewBViewModel()
        {
            TemplateDates = new List<TemplateDate>() {
                new TemplateDate(){Name="小明",Age = 16,Phone = 13214324920,Sex = TemplateDate.SexEnum.},
                new TemplateDate(){Name="小红",Age = 17,Phone = 38188949204,Sex = TemplateDate.SexEnum.}
            };
        }
    }

View绑定

        <DataGrid CanUserAddRows="False"
                  hc:DataGridAttach.CanUnselectAllWithBlankArea="True"
                  ItemsSource="{Binding TemplateDates}"
                  SelectionMode="Extended"
                  SelectionUnit="Cell" />

在这里插入图片描述
感觉UI效果还行

Growl消息提示

这个部分比较难,可以看看官方的文档

Growl 信息通知

如果想要设置提示的位置,可以手动添加如下控件。可以修改提示出现的位置。不过我个人建议不添加,因为默认的左上角就够用了。

<ScrollViewer VerticalScrollBarVisibility="Hidden"
              HorizontalAlignment="Right">
    <StackPanel hc:Growl.GrowlParent="True"
                VerticalAlignment="Top"
                Margin="0,10,10,10" />
</ScrollViewer>

按钮事件声明

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using HandyControl.Controls;
using HandyControl.Data;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WpfApp1.ViewModels
{
    public class ViewAViewModel:ObservableObject
    {
        public RelayCommand InfoBtn { get; set; }

        public RelayCommand SuccessBtn { get; set; }

        public RelayCommand WarningBtn { get; set; }    

        public RelayCommand ErrorBtn { get; set; }

        public RelayCommand AskBtn { get; set; }

        public RelayCommand SeriousBtn { get; set; }

        public RelayCommand ClearBtn { get; set; }

        public RelayCommand InfoGlobalBtn { get; set; }

        public RelayCommand SuccessGlobalBtn { get; set; }

        public RelayCommand WarningGlobalBtn { get; set; }

        public RelayCommand ErrorGlobalBtn { get; set; }

        public RelayCommand AskGlobalBtn { get; set; }

        public RelayCommand SeriousGlobalBtn { get; set; }

        public RelayCommand ClearGlobalBtn { get; set; }

        public ViewAViewModel() {
            InfoBtn = new RelayCommand(() =>
            {
                Growl.Info("消息");
            });
            SuccessBtn = new RelayCommand(() => {
                Growl.Success("成功!");
            });

            WarningBtn = new RelayCommand(() => {
                Growl.Warning("警告");
            });
            ErrorBtn = new RelayCommand(() => {
                Growl.Error("错误");
            });

            AskBtn = new RelayCommand(() => {
                Growl.Ask("询问", isConfirmed =>
                {
                    Growl.Info($"询问结果[{isConfirmed}]");
                    return true;
                });
            
            });
            SeriousBtn = new RelayCommand(() => {
                Growl.Fatal("严重");
            });
            ClearBtn = new RelayCommand(() => { 
            
                Growl.Clear();
            });


            InfoGlobalBtn = new RelayCommand(() =>
            {
                Growl.InfoGlobal("消息");
            });
            SuccessGlobalBtn = new RelayCommand(() => {
                Growl.SuccessGlobal("成功!");
            });

            WarningGlobalBtn = new RelayCommand(() => {
                Growl.WarningGlobal("警告");
            });
            ErrorGlobalBtn = new RelayCommand(() => {
                Growl.ErrorGlobal("错误");
            });

            AskGlobalBtn = new RelayCommand(() => {
                Growl.AskGlobal("询问", isConfirmed =>
                {
                    Growl.InfoGlobal($"询问结果[{isConfirmed}]");
                    return true;
                });

            });
            SeriousGlobalBtn = new RelayCommand(() => {
                Growl.FatalGlobal("严重");
            });
            ClearGlobalBtn = new RelayCommand(() => {

                Growl.ClearGlobal();
            });
        }
    }
}

按钮事件绑定

 <hc:Divider Content="窗体消息"
             Margin="0"
             FontSize="30" />
 <StackPanel Orientation="Horizontal">
     <StackPanel.Resources>
         <Style TargetType="Button"
                BasedOn="{StaticResource ButtonDefault}">
             <Setter Property="Margin"
                     Value="1" />
         </Style>
     </StackPanel.Resources>
     <Button Content="信息"
             Command="{Binding InfoBtn}" />
     <Button Content="成功"
             Command="{Binding SuccessBtn}" />
     <Button Content="警告"
             Command="{Binding WarningBtn}" />
     <Button Content="错误"
             Command="{Binding ErrorBtn}" />
     <Button Content="询问"
             Command="{Binding AskBtn}" />
     <Button Content="严重"
             Command="{Binding SeriousBtn}" />
     <Button Content="清空"
             Command="{Binding ClearBtn}" />
 </StackPanel>
 <hc:Divider Content="桌面消息"
             Margin="0"
             FontSize="30" />
 <StackPanel Orientation="Horizontal">
     <StackPanel.Resources>
         <Style TargetType="Button"
                BasedOn="{StaticResource ButtonDefault}">
             <Setter Property="Margin"
                     Value="1" />
         </Style>
     </StackPanel.Resources>
     <Button Content="信息"
             Command="{Binding InfoGlobalBtn}" />
     <Button Content="成功"
             Command="{Binding SuccessGlobalBtn}" />
     <Button Content="警告"
             Command="{Binding WarningGlobalBtn}" />
     <Button Content="错误"
             Command="{Binding ErrorGlobalBtn}" />
     <Button Content="询问"
             Command="{Binding AskGlobalBtn}" />
     <Button Content="严重"
             Command="{Binding SeriousGlobalBtn}" />
     <Button Content="清空"
             Command="{Binding ClearGlobalBtn}" />
 </StackPanel>

实现效果:
在这里插入图片描述

结论

这里简单使用了一下HandyControl的控件,其实还有很多别的控件,这里由于篇幅就不展开使用了。由于有额外的Icon数据手动添加,HandyControl基本已经完美了,搭配我之前的推荐的LiveCharts2,WPF基本的UI控件已经够用了。其实WPF也是很简单的,主要是国内的相关讨论比较少。我之前写过一个网易云的WPF版本,接下来会使用HandyControl进行重构。

WPF Live Charts2 自学笔记

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】044_Kaggle房价预测(机器学习模型实战)

参考自《动手学深度学习》中“Kaggle比赛实战&#xff1a;预测房价”一节 一、数据准备 首先从网站上下载要获取的房价数据。 DATA_HUB是一个字典&#xff0c;用来将数据集名称的字符串和数据集相关的二元组一一对应。 二元组包含两个值&#xff1a;数据集的URL和用来验证文…

基于linux系统的Tomcat+Mysql+Jdk环境搭建(二)jdk1.8 linux 上传到MobaXterm 工具的已有session里

【JDK安装】 1.首先下载一个JDK版本 官网地址&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下载1.8版本&#xff0c;用红框标注出来了&#xff1a; 也许有的同学看到没有1.8版本&#xff0c;你可以随便下载一个linux的…

本地运行大语言模型并可视化(Ollama+big-AGI方案)

目前有两种方案支持本地部署&#xff0c;两种方案都是基于llamacpp。其中 Ollama 目前只支持 Mac&#xff0c;LM Studio目前支持 Mac 和 Windows。 LM Studio&#xff1a;https://lmstudio.ai/ Ollama&#xff1a;https://ollama.ai/download 本文以 Ollama 为例 step1 首先下…

限流常用算法以及基于Sentinel的微服务限流及熔断

一、服务限流的作用及实现 在没有任何保护机制的情况下&#xff0c;如果所有的流量都进入服务器&#xff0c;很可能造成服务器宕机导致整个系统不可用&#xff0c;从而造成巨大的损失。为了保证系统在这些场景中仍然能够稳定运行&#xff0c;就需要采取一定的系统保护策略&…

智能优化算法应用:基于天牛须算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于天牛须算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于天牛须算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.天牛须算法4.实验参数设定5.算法结果6.参考文…

Ubuntu 常用命令之 ls 命令用法介绍

Ubuntu ls 命令用法介绍 ls是Linux系统下的一个基本命令&#xff0c;用于列出目录中的文件和子目录。它有许多选项可以用来改变列出的内容和格式。 以下是一些基本的ls命令选项 -l&#xff1a;以长格式列出文件&#xff0c;包括文件类型、权限、链接数、所有者、组、大小、最…

Java 第10、11章 本章作业

目录 6 综合编程题7 成员内部类应用8 枚举类 & switch 6 综合编程题 3. 交通工具工厂类&#xff1a;由于在任务中只需要调用其中获得交通工具的方法&#xff0c;可以将方法定义为静态方法&#xff0c;这样就不用先创建工厂类的对象&#xff0c;直接“类名.方法” 即可。为了…

基于Java SSM框架实现疫情居家办公OA系统项目【项目源码+论文说明】

基于java的SSM框架实现疫情居家办公OA系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识…

3.1 内容管理模块 - 工程搭建、课程查询、配置Swagger、数据字典

文章目录 内容管理模块一、基础工程搭建1.1 需求分析1.2 业务流程1.3 数据模型1.4 创建模块工程1.4.1 介绍1.4.2 xuecheng-plus-content 聚合工程1.4.3 模块演示 二、课程查询准备2.1 需求分析2.1.1 业务流程2.1.2 数据模型 2.2 生成PO类2.2.1 新增Maven配置2.2.2 课程基本信息…

文档安全加固:零容忍盗窃,如何有效预防重要信息外泄

文档安全保护不仅需要从源头着手&#xff0c;杜绝文档在使用和传播过程中产生的泄密风险&#xff0c;同时还需要对文档内容本身进行有效的保护。为了防范通过拷贝、截屏、拍照等手段盗窃重要文档内容信息的风险&#xff0c;迅软DSE加密软件提供了文档加密保护功能&#xff0c;能…

用23种设计模式打造一个cocos creator的游戏框架----(十八)责任链模式

1、模式标准 模式名称&#xff1a;责任链模式 模式分类&#xff1a;行为型 模式意图&#xff1a;使多个对象都有机会处理请求&#xff0c;从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链&#xff0c;并沿着这条链传递该请求&#xff0c;直到有一个对象处…

MLX:苹果 专为统一内存架构(UMA) 设计的机器学习框架

“晨兴理荒秽&#xff0c;带月荷锄归” 夜深闻讯&#xff0c;有点兴奋&#xff5e; 苹果为 UMA 设计的深度学习框架真的来了 统一内存架构 得益于 CPU 与 GPU 内存的共享&#xff0c;同时与 MacOS 和 M 芯片 交相辉映&#xff0c;在效率上&#xff0c;实现对其他框架的降维打…

Redis设计与实现之压缩列表

目录 一、 压缩列表 1、ziplist的构成 2、节点的构成 pre_entry_length encoding 和 length content 3、创建新 ziplist 4、将节点添加到末端 5、将节点添加到某个/某些节点的前面 6、删除节点 7、遍历 8、查找元素、根据值定位节点 二、小结 一、 压缩列表 Zipli…

论文降重同义词替换的实践经验与改进建议 快码论文

大家好&#xff0c;今天来聊聊论文降重同义词替换的实践经验与改进建议&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 标题&#xff1a;论文降重同义词替换的实践经验与改…

TS类型体操-简单-实现pick

文章目录 问题描述举例实现 问题描述 不使用 Pick<T, K> &#xff0c;实现 TS 内置的 Pick<T, K> 的功能。 从类型T 中选出符合 K 的属性&#xff0c;构造一个新的类型。 举例 interface Todo {title: stringdescription: stringcompleted: boolean }type TodoPre…

挖矿木马应急响应-案例分析

挖矿木马应急响应-案例分析 linux 终端无法使用系统资源使用异常高 首先解决linux命令无法使用的问题&#xff0c;显示libc.so.6 没有重新连接一下libc文件 查看日志 发现木马运行成功后就日志一直报libc错误 根据信息向上插在日志 向上发现&#xff0c;root用户被爆破后…

【Spring教程30】Spring框架实战:从零开始学习SpringMVC 之 Rest风格简介与RESTful入门案例

目录 1 REST简介2 RESTful入门案例2.1 环境准备2.2 思路分析2.3 修改RESTful风格 3 知识点总结 欢迎大家回到《Java教程之Spring30天快速入门》&#xff0c;本教程所有示例均基于Maven实现&#xff0c;如果您对Maven还很陌生&#xff0c;请移步本人的博文《如何在windows11下安…

windows 10 安装和配置nginx

1 下载nginx 1.1 下载地址&#xff1a;http://nginx.org/en/download.html 1.2 使用解压到安装目录 1.3 更改配置 conf目录下nginx.conf 修改为未被占用的端口&#xff0c;地址改成你的地址 server {listen 9999;server_name localhost;#charset koi8-r;#access_lo…

SQL进阶理论篇(八):SQL查询的IO成本

文章目录 简介数据库缓冲池查看缓冲池的大小数据页加载的三种方式通过 last_query_cost 统计 SQL 语句的查询成本总结参考文献 简介 本节将介绍磁盘IO是如何加载数据的&#xff0c;重点介绍一下数据库缓冲池的概念。主要包括&#xff1a; 什么是数据库缓冲池&#xff0c;它在…

云架构俭约之道七法则(The Frugal Architect)

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 文章目录 一、前言关于 Law 与 Rule 的区别 二、云架构俭约之道七法…