WPF 使用FontAwesome字体图标

要搞点小软件,又不想使用图标和图标类库,突然想起FontAwesome,试了一下,还挺方便的,先弄了几个最常用的图标试一下,弄了几个按钮的样式,看一下效果:

看一下fontAwesome使用方法:

首先从官网下载字体,地址:http://www.fontawesome.com.cn/

下载后,把其中的 fontawesome-webfont.ttf 复制到软件目录,

添加一个几个资源字典:

Base.xaml : 

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:sys="clr-namespace:System;assembly=mscorlib"><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="Colors.xaml"/></ResourceDictionary.MergedDictionaries><sys:Double x:Key="FontSizeMini" >12</sys:Double><sys:Double x:Key="FontSizeNormal" >14</sys:Double><sys:Double x:Key="FontSizeLarge" >16</sys:Double><FontFamily x:Key="FontAwesome">pack://application;,,,/Fonts/#FontAwesome</FontFamily><!--FontAwesome Icons Strings--><sys:String x:Key="SettingIcon">&#xf013;</sys:String><sys:String x:Key="MinsizeIcon">&#xf2d1;</sys:String><sys:String x:Key="MaxsizeIcon">&#xf2d0;</sys:String><sys:String x:Key="CloseIcon">&#xf00d;</sys:String><Style x:Key="BaseStyle" TargetType="{x:Type Control}"><Setter Property="FontFamily" Value="微软雅黑"/><Setter Property="FontSize" Value="{StaticResource FontSizeNormal}"/><Setter Property="BorderThickness" Value="0"/>
</Style><Style x:Key="IconButtonBaseStyle" TargetType="Button"><Setter Property="FontFamily" Value="{StaticResource FontAwesome}"/><Setter Property="BorderThickness" Value="0"/>
</Style>
</ResourceDictionary>

Colors.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"><Color x:Key="Black">#000000</Color><SolidColorBrush x:Key="BlackBrush" Color="{StaticResource Black}"/><Color x:Key="White">#FFFFFF</Color><SolidColorBrush x:Key="WhiteBrush" Color="{StaticResource White}"/><Color x:Key="TransWhite">#33dddddd</Color><SolidColorBrush x:Key="TransWhiteBrush" Color="{StaticResource TransWhite}"/><Color x:Key="Gray">#B8BABC</Color><SolidColorBrush x:Key="GrayBrush" Color="{StaticResource Gray}"/><Color x:Key="VeryDarkGray">#C0C0C0</Color><SolidColorBrush x:Key="VeryDarkGrayBrush" Color="{StaticResource VeryDarkGray}"/><Color x:Key="DarkGray">#C3C0C3</Color><SolidColorBrush x:Key="DarkGrayBrush" Color="{StaticResource DarkGray}"/><Color x:Key="LightGray">#ECECEC</Color><SolidColorBrush x:Key="LightGrayBrush" Color="{StaticResource LightGray}"/><Color x:Key="VeryLightGray">#F3F3F3</Color><SolidColorBrush x:Key="VeryLightGrayBrush" Color="{StaticResource VeryLightGray}"/><Color x:Key="ButtonBack">#07BDFD</Color><SolidColorBrush x:Key="ButtonBackBrush" Color="{StaticResource ButtonBack}"/><Color x:Key="ButtonHoverBack">#1FC7FD</Color><SolidColorBrush x:Key="ButtonHoverBackBrush" Color="{StaticResource ButtonHoverBack}"/>
</ResourceDictionary>

ButtonStyles.xaml (重点)

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:GQ"><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="Base.xaml"/></ResourceDictionary.MergedDictionaries><Style TargetType="{x:Type Button}" x:Key="IgnoreHover"><Setter Property="Background" Value="Transparent"/><Setter Property="BorderThickness" Value="0"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type Button}"><Border Padding="{TemplateBinding Padding}" Background="{TemplateBinding Background}"><ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center"/></Border></ControlTemplate></Setter.Value></Setter>
</Style><Style TargetType="{x:Type Button}" BasedOn="{StaticResource BaseStyle}"><Setter Property="Background" Value="{StaticResource ButtonBackBrush}"/><Setter Property="Foreground" Value="{StaticResource WhiteBrush}"/><Setter Property="FocusVisualStyle" Value="{x:Null}"/><Setter Property="Padding" Value="20 10"/><Setter Property="Margin" Value="10"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type ButtonBase}"><Border x:Name="border"CornerRadius="6"BorderBrush="{TemplateBinding BorderBrush}"BorderThickness="{TemplateBinding BorderThickness}"Background="{TemplateBinding Background}" SnapsToDevicePixels="True"><Grid><TextBlock Text="{TemplateBinding Content}" Focusable="False" FontFamily="{TemplateBinding FontFamily}"FontSize="{TemplateBinding FontSize}"HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/></Grid></Border><ControlTemplate.Triggers><EventTrigger RoutedEvent="MouseEnter"><BeginStoryboard><Storyboard><ColorAnimation To="{StaticResource ButtonHoverBack}" Duration="0:0:0.3" Storyboard.TargetName="border" Storyboard.TargetProperty="Background.Color"/></Storyboard></BeginStoryboard></EventTrigger><EventTrigger RoutedEvent="MouseLeave"><BeginStoryboard><Storyboard><ColorAnimation From="{StaticResource ButtonHoverBack}" Duration="0:0:0.3" Storyboard.TargetName="border" Storyboard.TargetProperty="Background.Color"/></Storyboard></BeginStoryboard></EventTrigger><Trigger Property="IsEnabled" Value="False"><Setter Property="Background" TargetName="border" Value="{StaticResource VeryDarkGrayBrush}"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter>
</Style><Style x:Key="IconButton" TargetType="Button" BasedOn="{StaticResource IconButtonBaseStyle}"><Setter Property="Background" Value="Transparent"/><Setter Property="Foreground" Value="{StaticResource WhiteBrush}"/><Setter Property="Margin" Value="0"/><Setter Property="Height" Value="32"/><Setter Property="Padding" Value="5"/><Setter Property="Width" Value="{Binding ActualHeight,RelativeSource={RelativeSource Self}}"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type ButtonBase}"><Border x:Name="border"BorderBrush="{TemplateBinding BorderBrush}"BorderThickness="{TemplateBinding BorderThickness}"Background="{TemplateBinding Background}" SnapsToDevicePixels="True"><Viewbox><TextBlock Text="{TemplateBinding Content}" Focusable="False" FontFamily="{TemplateBinding FontFamily}"HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" FontSize="{TemplateBinding FontSize}"SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/></Viewbox></Border><ControlTemplate.Triggers><EventTrigger RoutedEvent="MouseEnter"><BeginStoryboard><Storyboard><ColorAnimation To="{StaticResource TransWhite}" Duration="0:0:0.2" Storyboard.TargetName="border" Storyboard.TargetProperty="Background.Color"/></Storyboard></BeginStoryboard></EventTrigger><EventTrigger RoutedEvent="MouseLeave"><BeginStoryboard><Storyboard><ColorAnimation From="{StaticResource TransWhite}" Duration="0:0:0.2" Storyboard.TargetName="border" Storyboard.TargetProperty="Background.Color"/></Storyboard></BeginStoryboard></EventTrigger><Trigger Property="IsEnabled" Value="False"><Setter Property="Background" TargetName="border" Value="{StaticResource VeryDarkGrayBrush}"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter>
</Style><Style x:Key="IconGrowButton" TargetType="{x:Type Button}" BasedOn="{StaticResource IconButtonBaseStyle}"><Setter Property="Background" Value="Transparent"/><Setter Property="Foreground" Value="{StaticResource WhiteBrush}"/><Setter Property="Margin" Value="0"/><Setter Property="Height" Value="32"/><Setter Property="Padding" Value="5"/><Setter Property="Width" Value="{Binding ActualHeight,RelativeSource={RelativeSource Self}}"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type ButtonBase}"><Border x:Name="border"BorderBrush="{TemplateBinding BorderBrush}"BorderThickness="{TemplateBinding BorderThickness}"Background="{TemplateBinding Background}" SnapsToDevicePixels="True"RenderTransformOrigin="0.5,0.5"><Border.RenderTransform><ScaleTransform/></Border.RenderTransform><Viewbox><TextBlock Text="{TemplateBinding Content}" Focusable="False" FontFamily="{TemplateBinding FontFamily}"HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" FontSize="{TemplateBinding FontSize}"SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/></Viewbox></Border><ControlTemplate.Triggers><EventTrigger RoutedEvent="MouseEnter"><BeginStoryboard><Storyboard><DoubleAnimation To="1.3" Duration="0:0:0.2" Storyboard.TargetName="border" Storyboard.TargetProperty="(RenderTransform).(ScaleTransform.ScaleX)"/><DoubleAnimation To="1.3" Duration="0:0:0.2" Storyboard.TargetName="border" Storyboard.TargetProperty="(RenderTransform).(ScaleTransform.ScaleY)"/></Storyboard></BeginStoryboard></EventTrigger><EventTrigger RoutedEvent="MouseLeave"><BeginStoryboard><Storyboard><DoubleAnimation To="1" Duration="0:0:0.2" Storyboard.TargetName="border" Storyboard.TargetProperty="(RenderTransform).(ScaleTransform.ScaleX)"/><DoubleAnimation To="1" Duration="0:0:0.2" Storyboard.TargetName="border" Storyboard.TargetProperty="(RenderTransform).(ScaleTransform.ScaleY)"/></Storyboard></BeginStoryboard></EventTrigger><Trigger Property="IsEnabled" Value="False"><Setter Property="Background" TargetName="border" Value="{StaticResource VeryDarkGrayBrush}"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter>
</Style><Style x:Key="TextButton" TargetType="{x:Type Button}" BasedOn="{StaticResource BaseStyle}"><Setter Property="Background" Value="Transparent"/><Setter Property="Foreground" Value="{StaticResource WhiteBrush}"/><Setter Property="BorderThickness" Value="0"/><Setter Property="Padding" Value="20 10"/><Setter Property="Margin" Value="0 10"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type ButtonBase}"><Border x:Name="border"CornerRadius="6"BorderBrush="{TemplateBinding BorderBrush}"BorderThickness="{TemplateBinding BorderThickness}"Background="{TemplateBinding Background}" SnapsToDevicePixels="True"><TextBlock Text="{TemplateBinding Content}" Focusable="False" FontFamily="{TemplateBinding FontFamily}"FontSize="{TemplateBinding FontSize}"HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/></Border><ControlTemplate.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="Foreground" Value="{StaticResource DarkGrayBrush}"/></Trigger><Trigger Property="IsEnabled" Value="False"><Setter Property="Foreground" Value="{StaticResource VeryDarkGrayBrush}"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter>
</Style>    <!--上述5个样式 参考自 https://www.youtube.com/playlist?list=PLrW43fNmjaQVYF4zgsD0oL9Iv6u23PI6M有改动,不完全一样,你可以根据需要自行修改-->
</ResourceDictionary>

然后在App.xaml内添加所有资源字典:

<Application x:Class="GQ.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:GQ"StartupUri="/Windows/LoginWindow.xaml"xmlns:sys="clr-namespace:System;assembly=mscorlib"xmlns:arr="clr-namespace:System.Collections.Generic;assembly=mscorlib"><Application.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="/Styles/Base.xaml"/><ResourceDictionary Source="/Styles/Panel3DStyle.xaml"/><ResourceDictionary Source="/Styles/ButtonStyles.xaml"/></ResourceDictionary.MergedDictionaries></ResourceDictionary></Application.Resources>
</Application>

最后,创建一个LoginWindow.xaml,测试这几个样式,并使用FontAwesome:

<Window x:Class="GQ.LoginWindow"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:GQ"mc:Ignorable="d"AllowsTransparency="True"WindowStyle="None"Background="Gray"WindowStartupLocation="CenterScreen"Title="MainWindow" Height="470" Width="497"><Grid><StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"><StackPanel Orientation="Horizontal" HorizontalAlignment="Center"><Button FontFamily="{StaticResource FontAwesome}" Content="{StaticResource SettingIcon}"/><Button FontFamily="{StaticResource FontAwesome}" Content="{StaticResource MinsizeIcon}"/><Button FontFamily="{StaticResource FontAwesome}" Content="{StaticResource MaxsizeIcon}"/><Button FontFamily="{StaticResource FontAwesome}" Content="{StaticResource CloseIcon}"/></StackPanel><StackPanel Orientation="Horizontal" HorizontalAlignment="Center"><Button Style="{StaticResource IconGrowButton}"  Content="{StaticResource SettingIcon}"/><Button Style="{StaticResource IconGrowButton}"  Content="{StaticResource MinsizeIcon}"/><Button Style="{StaticResource IconGrowButton}"  Content="{StaticResource MaxsizeIcon}"/><Button Style="{StaticResource IconGrowButton}" Content="{StaticResource CloseIcon}"/></StackPanel><StackPanel Orientation="Horizontal" HorizontalAlignment="Center"><Button Style="{StaticResource IconButton}"  Content="{StaticResource SettingIcon}"/><Button Style="{StaticResource IconButton}"  Content="{StaticResource MinsizeIcon}"/><Button Style="{StaticResource IconButton}"  Content="{StaticResource MaxsizeIcon}"/><Button Style="{StaticResource IconButton}" Content="{StaticResource CloseIcon}"/></StackPanel><StackPanel Orientation="Horizontal" HorizontalAlignment="Center"><Button Style="{StaticResource TextButton}" FontFamily="{StaticResource FontAwesome}" Content="{StaticResource SettingIcon}"/><Button Style="{StaticResource TextButton}" FontFamily="{StaticResource FontAwesome}" Content="{StaticResource MinsizeIcon}"/><Button Style="{StaticResource TextButton}" FontFamily="{StaticResource FontAwesome}" Content="{StaticResource MaxsizeIcon}"/><Button Style="{StaticResource TextButton}" FontFamily="{StaticResource FontAwesome}" Content="{StaticResource CloseIcon}"/></StackPanel></StackPanel></Grid>
</Window>

这样控件就能使用完成了,虽然看起来很麻烦,但收益还是不小的,以后再添加别的图标,就很方便了。

效果图:

当然喽,做正经的软件,图标肯定是由设计给的,不是用这些网上的这些图标,只能自己玩玩,嘿嘿

如果喜欢,点个赞呗~

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

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

相关文章

从Google Maglev说起,如何造一个牛逼的负载均衡?

Maglev是谷歌为自己的数据中心研发的解决方案&#xff0c;并于2008开始用于生产环境。在第十三届网络系统设计与实现USENIX研讨会&#xff08;NSDI ‘16&#xff09;上&#xff0c; 来自谷歌、加州大学洛杉矶分校、SpaceX公司的工程师们分享了这一商用服务器负载均衡器Maglev的…

怎么打包图片_超简单的免费批量图片压缩技巧,只需3步

我们在上传图片的时候&#xff0c;经常会遇到一个问题&#xff0c;那就是图片文件太大&#xff0c;无法上传。那这个时候我们该怎么办呢&#xff1f;我们一般都会想到把图片进行压缩之后&#xff0c;重新上传。那么我们要怎么压缩图片呢&#xff1f;如果图片数量很多&#xff0…

Calendar类

接触java不久&#xff0c;感觉java真的挺好玩的。 Calendar 类是一个抽象类&#xff0c;它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法&#xff0c;并为操作日历字段&#xff08;例如获得下星期的日期&#xff09;提供了一些方法…

史上最牛的5次黑客攻击!比电影还刺激!

好莱坞认为&#xff0c;黑客就像是使用计算机的黑魔导士。在电影中&#xff0c;计算机可以炸毁房屋&#xff0c;关闭公路&#xff0c;释放瘟疫还有引发女权运动。也许有人认为&#xff0c;好莱坞的想象力很丰满&#xff0c;但现实是骨感的。他们错了&#xff0c;因为在现实中&a…

优化 .NET Core logging 中的泛型 logger

优化 .NET Core logging 中的泛型 loggerIntro在微软的 logging 组件中&#xff0c;我们可以比较方便的使用泛型 Logger&#xff0c;如&#xff1a;ILogger<Generic> 这样的&#xff0c;但是如果泛型 Logger 的类型是一个泛型类型就会有些问题&#xff0c;具体的泛型参数…

charts漏斗图表_ECharts漏斗图属性与实例介绍

ECharts漏斗图在 ECharts 系列中&#xff0c;漏斗图使用 series[i]-funnel 表示。漏斗图适用于业务流程比较规范、周期长、环节多的流程分析&#xff0c;通过漏斗各环节业务数据的比较&#xff0c;能够直观地发现和说明问题所在。示例&#xff1a;ECharts漏斗图属性type在漏斗图…

原来R语言还有这些不为人知的用处!

开学钜惠已经进行了好些天啦&#xff0c;前两天小天介绍了关于python课程的开学季限时优惠&#xff08;传送门&#xff09;&#xff0c;你以为这样就结束了吗&#xff1f;不不不&#xff0c;还有R语言系列的优惠没讲过呢。接下来&#xff0c;小天来详细说明一下&#xff01;19月…

记一次 .NET医院公众号程序 线程CPU双高分析

一&#xff1a;背景 1. 讲故事上周四有位朋友加wx咨询他的程序出现 CPU 线程 双高的情况&#xff0c;希望我能帮忙排查下&#xff0c;如下图&#xff1a;从截图看只是线程爆高&#xff0c;没看到 cpu 爆高哈????????????&#xff0c;有意思的是这位朋友说他&#…

谷歌搜索,揭示人性最黑暗的5个秘密

《卫报》网站发布文章指出&#xff0c;我们能够从我们在网上问的问题获得对自己更多的了解呢。美国数据科学家塞斯斯蒂芬斯-大卫多维茨&#xff08;Seth Stephens-Davidowitz&#xff09;通过分析谷歌的匿名搜索数据&#xff0c;揭示了我们最黑暗的一些秘密&#xff0c;揭露了我…

通过Dapr实现一个简单的基于.net的微服务电商系统(七)——一步一步教你如何撸Dapr之服务限流...

在一般的互联网应用中限流是一个比较常见的场景&#xff0c;也有很多常见的方式可以实现对应用的限流比如通过令牌桶通过滑动窗口等等方式都可以实现&#xff0c;也可以在整个请求流程中进行限流比如客户端限流就是在客户端通过随机数直接返回成功失败来决定是否发起请求。也可…

(转)完美画质 3D游戏反锯齿技术浅析 .

完美的画面已经离我们不再遥远——反锯齿技术浅析 不管现今的游戏画面有多完美&#xff0c;人物和环境有多真实&#xff0c;但游戏画面的构成的主要方式仍然没有得到改善&#xff1a;一帧画面由成千上万像素构成。这意味着物体多边形的轮廓最终是锯齿状的图形。所以画面质量不可…

业余时间学数据分析,如何快速上手

广泛被应用的数据分析谷歌的数据分析可以预测一个地区即将爆发的流感&#xff0c;从而进行针对性的预防&#xff1b;淘宝可以根据你浏览和消费的数据进行分析&#xff0c;为你精准推荐商品&#xff1b;口碑极好的网易云音乐&#xff0c;通过其相似性算法&#xff0c;为不同的人…

64位Visual Studio 2022,微软在下一盘大棋!

有没有跟我一样奇怪过&#xff0c;都2021年了&#xff0c;用的还是VS2019&#xff1f;原来微软是憋大招去了&#xff0c;4月18号Amanda的一篇博文宣布了一则重磅消息——Visual Studio 2022 首个预览版将于今年夏季发布 &#xff0c;并且终于成为万众期待的 64 位版&#xff01…

【重磅】MIT发布2018年“全球十大突破性技术”

“有些技术已经应用多年&#xff0c;有些则是意外之喜。无论如何&#xff0c;以下是我们认为将在未来的几年对我们的工作和生活产生巨大影响的技术突破。”北京时间2018年2月21日&#xff0c;《麻省理工科技评论》揭晓了2018年“全球十大突破性技术”&#xff0c;这份全球新兴科…

[Stardust]星尘配置中心

在分布式系统开发中&#xff0c;配置中心必不可少。在中通几年时间里&#xff0c;为了配合大数据计算平台&#xff0c;统一管理数百个微小应用&#xff0c;设计了一套轻量级配置中心。星尘配置中心在其理念基础上改进&#xff0c;针对中小团队而全新设计&#xff01;源码&#…

大数据可视化设计到底是啥,该怎么用

大数据可视化是个热门话题&#xff0c;在信息安全领域&#xff0c;也由于很多企业希望将大数据转化为信息可视化呈现的各种形式&#xff0c;以便获得更深的洞察力、更好的决策力以及更强的自动化处理能力&#xff0c;数据可视化已经成为网络安全技术的一个重要趋势。文章目录一…

WPF 如何实现颜色值拾取

WPF开发者QQ群&#xff1a; 340500857 前言如何进行颜色值拾取&#xff1f;这里采用的是调用WindowsAPI进行实现。吸取 沙漠尽头的狼 的建议多写一些文字进行描述。效果图如下&#xff1a;第一步 注册WindowsAPI 代码如下&#xff1a;[DllImport("user32.dll")]stati…

仿Google+相册的动画

在使用Google的时候&#xff0c;查看某一相册&#xff0c;会经常看到&#xff0c;如下图所示的动画效果。 鼠标移入、移出时均有动画效果&#xff0c;咋一看估计是使用了css3的transform属性来实现动画效果的。 在网上搜索“Google 相册 效果”的时候发现有人使用CSS3做了这样的…

看见到洞见之引子(二)机器学习算法

《看见到洞见》系列文章汇聚、分享的是绿盟科技创新中心对于数据分析在安全领域应用的技战术思考与经验&#xff0c;力求由浅入深层次递进&#xff0c;实战到方法论双线剖析。此文为系列文章之引子第二篇&#xff0c;深入浅出的对常用的数据分析和机器学习的算法进行介绍。在上…

一图看懂 ASP.NET Core 中的服务生命周期

翻译自 Waqas Anwar 2020年11月8日的文章 《ASP.NET Core Service Lifetimes (Infographic)》 [1]ASP.NET Core 支持依赖关系注入&#xff08;DI&#xff09;软件设计模式&#xff0c;该模式允许我们注册服务、控制如何实例化这些服务并将其注入到不同的组件中。一些服务可以在…