WPF实现类似网易云音乐的菜单切换
这里是借助三方UI框架实现了,感兴趣的小伙伴可以看一下。
深色模式:
浅色模式:
这里主要使用了以下三个包:
MahApps.Metro:UI库,提供菜单导航和其它控件
实现步骤:1、使用BlurWindow放置一个窗口
1 <tianxia:BlurWindow x:Class="GameOptimizerTool.MainWindow"2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"9 xmlns:tianxia="clr-namespace:TianXiaTech" 10 mc:Ignorable="d" 11 Title="工具箱" Height="650" Width="1100" TitleForeground="{DynamicResource MahApps.Brushes.Text}" Icon="logo.png" Background="{DynamicResource MahApps.Brushes.ThemeBackground}"> 12 <Grid> 13 </Grid> 14 </tianxia:BlurWindow>
这里的一些颜色使用了动态资源 ,以便实现深色和浅色模式的切换。
2、引入 XAML命名空间前缀
1 xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls" 2 xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" 3 xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
3、放置HamburgerMenu控件
通过设置HamburgerMenu.ItemsSource属性,可以设置菜单项
通过设置HamburgerMenu.OptionsItemsSource属性,可以增加设置项,设置项会显示在左下角
注意:这里我们需要设置控件的控件模板,否则 会显示异常
1 <mah:HamburgerMenu x:Name="HamburgerMenuControl"2 CompactPaneLength="48"3 OpenPaneLength="70"4 HamburgerWidth="48"5 IsPaneOpen="True"6 ItemInvoked="HamburgerMenuControl_OnItemInvoked"7 ItemTemplate="{StaticResource MenuItemTemplate}"8 OptionsItemTemplate="{StaticResource MenuItemTemplate}"9 SelectedIndex="0" 10 Style="{StaticResource MahApps.Styles.HamburgerMenu.Ripple}" 11 VerticalScrollBarOnLeftSide="False"> 12 <!--Items--> 13 <mah:HamburgerMenu.ItemsSource> 14 <mah:HamburgerMenuItemCollection> 15 <mah:HamburgerMenuIconItem Icon="{iconPacks:Material Kind=Home}" Label="首页"> 16 <mah:HamburgerMenuIconItem.Tag> 17 <local:HomeView /> 18 </mah:HamburgerMenuIconItem.Tag> 19 </mah:HamburgerMenuItemCollection> 20 </mah:HamburgerMenu.ItemsSource> 21 22 <!--设置--> 23 <mah:HamburgerMenu.OptionsItemsSource> 24 <mah:HamburgerMenuItemCollection> 25 <mah:HamburgerMenuIconItem Icon="{iconPacks:Material Kind=Cog}" Label="设置"> 26 <mah:HamburgerMenuIconItem.Tag> 27 <local:OptimizerView /> 28 </mah:HamburgerMenuIconItem.Tag> 29 </mah:HamburgerMenuIconItem> 30 </mah:HamburgerMenuItemCollection> 31 </mah:HamburgerMenu.OptionsItemsSource> 32 33 <mah:HamburgerMenu.ContentTemplate> 34 <DataTemplate DataType="{x:Type mah:HamburgerMenuIconItem}"> 35 <Grid Margin="20 0 10 0"> 36 <Grid.RowDefinitions> 37 <RowDefinition Height="Auto" /> 38 <RowDefinition Height="*" /> 39 </Grid.RowDefinitions> 40 <!--标题文本,如果需要大标题显示,取消注释这段代码--> 41 <TextBlock Grid.Row="0" 42 Margin="0 15 0 5" 43 Padding="0" 44 FontFamily="{DynamicResource MahApps.Fonts.Family.Header}" 45 FontSize="{DynamicResource MahApps.Font.Size.Header}" 46 Foreground="{DynamicResource MahApps.Brushes.Text}" 47 Text="{Binding Label}" /> 48 <ScrollViewer Grid.Row="1" 49 Focusable="False" 50 HorizontalScrollBarVisibility="Disabled" 51 VerticalScrollBarVisibility="Auto"> 52 <ContentControl Content="{Binding Tag}" Focusable="False" /> 53 </ScrollViewer> 54 </Grid> 55 </DataTemplate> 56 </mah:HamburgerMenu.ContentTemplate> 57 58 </mah:HamburgerMenu>
4、设置HamburgerMenu控件菜单项的样式
我们直接放到窗口资源 里
1 <tianxia:BlurWindow.Resources>2 <ResourceDictionary>3 <!--左侧菜单的样式-->4 <DataTemplate x:Key="MenuItemTemplate" DataType="{x:Type mah:HamburgerMenuIconItem}">5 <Grid Height="40">6 <Grid.ColumnDefinitions>7 <ColumnDefinition Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type mah:HamburgerMenu}}, Path=CompactPaneLength}" />8 <ColumnDefinition />9 </Grid.ColumnDefinitions>10 <ContentControl Grid.Column="0"11 HorizontalAlignment="Center"12 VerticalAlignment="Center"13 Content="{Binding Icon}"14 Focusable="False"15 IsTabStop="False" />16 <TextBlock Grid.Column="1"17 VerticalAlignment="Center"18 FontSize="13"19 Text="{Binding Label}" />20 </Grid>21 </DataTemplate>22 23 <ObjectDataProvider x:Key="DisplayModeEnumValues"24 MethodName="GetValues"25 ObjectType="{x:Type mah:SplitViewDisplayMode}">26 <ObjectDataProvider.MethodParameters>27 <x:Type TypeName="mah:SplitViewDisplayMode" />28 </ObjectDataProvider.MethodParameters>29 </ObjectDataProvider>30 31 <ObjectDataProvider x:Key="VisibilityEnumValues"32 MethodName="GetValues"33 ObjectType="{x:Type Visibility}">34 <ObjectDataProvider.MethodParameters>35 <x:Type TypeName="Visibility" />36 </ObjectDataProvider.MethodParameters>37 </ObjectDataProvider>38 39 <Style x:Key="MahApps.Styles.ListBoxItem.HamburgerMenuItem.Ripple"40 BasedOn="{StaticResource MahApps.Styles.ListBoxItem.HamburgerMenuItem}"41 TargetType="{x:Type ListBoxItem}">42 <Setter Property="Template">43 <Setter.Value>44 <ControlTemplate TargetType="{x:Type ListBoxItem}">45 <Grid x:Name="RootGrid"46 Background="Transparent"47 RenderOptions.ClearTypeHint="{TemplateBinding RenderOptions.ClearTypeHint}">48 <Border x:Name="Border"49 Background="{TemplateBinding Background}"50 BorderBrush="{TemplateBinding BorderBrush}"51 BorderThickness="{TemplateBinding BorderThickness}"52 SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />53 <Grid Margin="{TemplateBinding BorderThickness}">54 <Grid HorizontalAlignment="Left"55 VerticalAlignment="Center"56 Visibility="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type mah:HamburgerMenu}}, Path=ShowSelectionIndicator, Mode=OneWay, Converter={StaticResource BooleanToVisibilityConverter}}">57 <Rectangle x:Name="SelectionIndicator"58 Width="{DynamicResource HamburgerMenuSelectionIndicatorThemeWidth}"59 Height="{DynamicResource HamburgerMenuSelectionIndicatorThemeHeight}"60 Fill="{TemplateBinding Foreground}"61 Focusable="False"62 Opacity="0.0" />63 </Grid>64 <materialDesign:Ripple x:Name="ContentPresenter"65 Padding="{TemplateBinding Padding}"66 HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"67 VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"68 Content="{TemplateBinding Content}"69 ContentTemplate="{TemplateBinding ContentTemplate}"70 ContentTemplateSelector="{TemplateBinding ContentTemplateSelector}"71 Feedback="{DynamicResource MahApps.Brushes.Gray.MouseOver}"72 Focusable="False"73 SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />74 </Grid>75 </Grid>76 <ControlTemplate.Triggers>77 <Trigger Property="IsSelected" Value="True">78 <Setter TargetName="Border" Property="Background" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:ItemHelper.SelectedBackgroundBrush), Mode=OneWay}" />79 <Setter TargetName="ContentPresenter" Property="Foreground" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:ItemHelper.SelectedForegroundBrush), Mode=OneWay}" />80 <Setter TargetName="SelectionIndicator" Property="Fill" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:ItemHelper.SelectedForegroundBrush), Mode=OneWay}" />81 <Setter TargetName="SelectionIndicator" Property="Opacity" Value="1.0" />82 </Trigger>83 <MultiTrigger>84 <MultiTrigger.Conditions>85 <Condition Property="IsSelected" Value="True" />86 <Condition Property="Selector.IsSelectionActive" Value="True" />87 </MultiTrigger.Conditions>88 <Setter TargetName="Border" Property="Background" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:ItemHelper.ActiveSelectionBackgroundBrush), Mode=OneWay}" />89 <Setter TargetName="ContentPresenter" Property="Foreground" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:ItemHelper.ActiveSelectionForegroundBrush), Mode=OneWay}" />90 <Setter TargetName="SelectionIndicator" Property="Fill" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:ItemHelper.ActiveSelectionForegroundBrush), Mode=OneWay}" />91 </MultiTrigger>92 93 <MultiTrigger>94 <MultiTrigger.Conditions>95 <Condition Property="IsMouseOver" Value="True" />96 <Condition Property="IsSelected" Value="True" />97 </MultiTrigger.Conditions>98 <Setter TargetName="Border" Property="Background" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:ItemHelper.HoverSelectedBackgroundBrush), Mode=OneWay}" />99 <Setter TargetName="ContentPresenter" Property="Foreground" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:ItemHelper.HoverSelectedForegroundBrush), Mode=OneWay}" /> 100 <Setter TargetName="SelectionIndicator" Property="Fill" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:ItemHelper.HoverSelectedForegroundBrush), Mode=OneWay}" /> 101 </MultiTrigger> 102 <MultiTrigger> 103 <MultiTrigger.Conditions> 104 <Condition Property="IsMouseOver" Value="True" /> 105 <Condition Property="IsSelected" Value="False" /> 106 </MultiTrigger.Conditions> 107 <Setter TargetName="Border" Property="Background" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:ItemHelper.HoverBackgroundBrush), Mode=OneWay}" /> 108 <Setter TargetName="ContentPresenter" Property="Foreground" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:ItemHelper.HoverForegroundBrush), Mode=OneWay}" /> 109 <Setter TargetName="SelectionIndicator" Property="Fill" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:ItemHelper.HoverForegroundBrush), Mode=OneWay}" /> 110 </MultiTrigger> 111 112 <Trigger Property="mah:ItemHelper.IsMouseLeftButtonPressed" Value="True"> 113 <Setter TargetName="Border" Property="Background" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:ItemHelper.MouseLeftButtonPressedBackgroundBrush), Mode=OneWay}" /> 114 <Setter TargetName="ContentPresenter" Property="Foreground" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:ItemHelper.MouseLeftButtonPressedForegroundBrush), Mode=OneWay}" /> 115 <Setter TargetName="SelectionIndicator" Property="Fill" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:ItemHelper.MouseLeftButtonPressedForegroundBrush), Mode=OneWay}" /> 116 </Trigger> 117 <Trigger Property="mah:ItemHelper.IsMouseRightButtonPressed" Value="True"> 118 <Setter TargetName="Border" Property="Background" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:ItemHelper.MouseRightButtonPressedBackgroundBrush), Mode=OneWay}" /> 119 <Setter TargetName="ContentPresenter" Property="Foreground" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:ItemHelper.MouseRightButtonPressedForegroundBrush), Mode=OneWay}" /> 120 <Setter TargetName="SelectionIndicator" Property="Fill" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:ItemHelper.MouseRightButtonPressedForegroundBrush), Mode=OneWay}" /> 121 </Trigger> 122 123 <Trigger Property="IsEnabled" Value="False"> 124 <Setter TargetName="Border" Property="Background" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:ItemHelper.DisabledBackgroundBrush), Mode=OneWay}" /> 125 <Setter TargetName="ContentPresenter" Property="Foreground" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:ItemHelper.DisabledForegroundBrush), Mode=OneWay}" /> 126 <Setter TargetName="RootGrid" Property="Background" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background, Mode=OneWay}" /> 127 <Setter TargetName="SelectionIndicator" Property="Fill" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:ItemHelper.DisabledForegroundBrush), Mode=OneWay}" /> 128 </Trigger> 129 <MultiTrigger> 130 <MultiTrigger.Conditions> 131 <Condition Property="IsEnabled" Value="False" /> 132 <Condition Property="IsSelected" Value="True" /> 133 </MultiTrigger.Conditions> 134 <Setter TargetName="Border" Property="Background" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:ItemHelper.DisabledSelectedBackgroundBrush), Mode=OneWay}" /> 135 <Setter TargetName="ContentPresenter" Property="Foreground" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:ItemHelper.DisabledSelectedForegroundBrush), Mode=OneWay}" /> 136 <Setter TargetName="SelectionIndicator" Property="Fill" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(mah:ItemHelper.DisabledSelectedForegroundBrush), Mode=OneWay}" /> 137 </MultiTrigger> 138 </ControlTemplate.Triggers> 139 </ControlTemplate> 140 </Setter.Value> 141 </Setter> 142 <Setter Property="mah:ItemHelper.ActiveSelectionBackgroundBrush" Value="Transparent" /> 143 <Setter Property="mah:ItemHelper.ActiveSelectionForegroundBrush" Value="{DynamicResource MahApps.Brushes.AccentBase}" /> 144 <Setter Property="mah:ItemHelper.DisabledForegroundBrush" Value="{DynamicResource MahApps.Brushes.Gray}" /> 145 <Setter Property="mah:ItemHelper.DisabledSelectedBackgroundBrush" Value="Transparent" /> 146 <Setter Property="mah:ItemHelper.DisabledSelectedForegroundBrush" Value="{DynamicResource MahApps.Brushes.Gray}" /> 147 <Setter Property="mah:ItemHelper.HoverBackgroundBrush" Value="{DynamicResource MahApps.Brushes.Gray.SemiTransparent}" /> 148 <Setter Property="mah:ItemHelper.HoverSelectedBackgroundBrush" Value="{DynamicResource MahApps.Brushes.Gray.SemiTransparent}" /> 149 <Setter Property="mah:ItemHelper.HoverSelectedForegroundBrush" Value="{DynamicResource MahApps.Brushes.AccentBase}" /> 150 <Setter Property="mah:ItemHelper.SelectedBackgroundBrush" Value="Transparent" /> 151 <Setter Property="mah:ItemHelper.SelectedForegroundBrush" Value="{DynamicResource MahApps.Brushes.AccentBase}" /> 152 </Style> 153 154 <Style x:Key="MahApps.Styles.HamburgerMenu.Ripple" 155 BasedOn="{StaticResource MahApps.Styles.HamburgerMenu}" 156 TargetType="{x:Type mah:HamburgerMenu}"> 157 <Setter Property="ItemContainerStyle" Value="{StaticResource MahApps.Styles.ListBoxItem.HamburgerMenuItem.Ripple}" /> 158 <Setter Property="OptionsItemContainerStyle" Value="{StaticResource MahApps.Styles.ListBoxItem.HamburgerMenuItem.Ripple}" /> 159 <Setter Property="PaneBackground" Value="{DynamicResource MahApps.Brushes.ThemeBackground}" /> 160 <Setter Property="PaneForeground" Value="{DynamicResource MahApps.Brushes.Text}" /> 161 <Setter Property="ShowSelectionIndicator" Value="True" /> 162 </Style> 163 164 </ResourceDictionary> 165 </tianxia:BlurWindow.Resources>
5、增加菜单项切换时的事件处理程序
在放置HamburgerMenu控件时,设置了ItemInvoked事件
1 ItemInvoked="HamburgerMenuControl_OnItemInvoked"
事件处理程序如下:
1 private void HamburgerMenuControl_OnItemInvoked(object sender, MahApps.Metro.Controls.HamburgerMenuItemInvokedEventArgs args) 2 { 3 HamburgerMenuControl.Content = args.InvokedItem; 4 }
6、切换深色模式
MahApps.Metro提供了模式切换的功能,直接调用以下代码即可
1 private void Window_Loaded(object sender, RoutedEventArgs e) 2 { 3 ThemeManager.Current.ChangeThemeBaseColor(Application.Current, "Dark"); 4 }
HamburgerMenu控件是如何实现的
这里内部其实是使用的ListBox,ListBox自身已经具备了切换事件和选中事件,所以在ListBox的基础上,加以封装,就能实现HamburgerMenu。
这里不做详细介绍,可以参考MahApps.Metro源码里的Themes\HamburgerMenuTemplate.xaml和Controls\HamburgerMenu里的文件。
项目地址:GitHub - MahApps/MahApps.Metro: A framework that allows developers to cobble together a better UI for their own WPF applications with minimal effort.
最终效果
示例代码
相关文章:

WPF实现类似网易云音乐的菜单切换
这里是借助三方UI框架实现了,感兴趣的小伙伴可以看一下。 深色模式: 浅色模式: 这里主要使用了以下三个包: MahApps.Metro:UI库,提供菜单导航和其它控件 实现步骤:1、使用B…...

OpenCV人脸检测与识别:构建智能识别系统
在当今科技日新月异的时代,人脸识别技术以其独特的便利性和安全性,在各个领域都展现出了巨大的应用潜力。从智能手机的面部解锁,到机场的自动安检,再到商场的顾客行为分析,人脸识别技术无处不在。本文将深入探讨如何使…...

H5 Canvas 举牌小人
之前看到这种的举牌小人的图片觉得很有意思,最近有时间所以就尝试写写看。 在线链接 https://linyisonger.github.io/H5.Examples/?name./080.Canvas%20%E4%B8%BE%E7%89%8C%E5%B0%8F%E4%BA%BA.html 生成效果 实现代码 <!DOCTYPE html> <html lang"…...

rom定制系列------小米6x_澎湃os1.0.28安卓13定制固件修改 刷写过程与界面预览
💝💝💝 在接待很多定制化系统过程中。小米6x机型为很多工作室客户使用。但官方低版本固件无法适应新应用的使用。有些第三方固件却可以完美解决。此固件是客户分享的卡刷固件。需要修改为可以批量刷写的线刷固件。去除一些内置应用。需要自带…...

电脑硬件性能:HDD + SSD + CPU + GPU
文章目录 任务管理器:性能参数详解一、电脑的硬件组成二、机械硬盘和固态硬盘2.1、详细介绍:HDD SSD2.2、读写性能2.2.1、(HDD)读写性能的影响因素:寻道时间 旋转延迟 数据传输时间2.2.2、(SSDÿ…...

通过粒子系统customData传值给材质球
粒子特效使用的材质球,如果通过动画控制shader的某个参数,例如溶解阈值,所有的粒子都会按照相同的数值变化,如果需要每个粒子在自己的生命周期内按照曲线变化,则可以通过customData实现。 1.ParticleSystem中勾选Cust…...

常用分布的数学期望、方差、特征函数
文章目录 相关教程相关文献常用分布的数学期望&方差&特征函数定义事件域概率条件概率随机变量分布函数连续随机变量的概率密度函数数学期望离散随机变量连续随机变量 方差与标准差最大似然估计特征函数 不等式Chebyshev(切比雪夫)不等式 作者&am…...

ssh-配置
生成 SSH 密钥是一项重要的安全措施,用于在客户端和服务器之间建立加密连接。以下是在 Windows 和 Linux 系统上生成 SSH 密钥的详细步骤。 一、在 Linux 上生成 SSH 密钥 Linux 通常预装了 ssh-keygen 工具,可以通过以下步骤生成 SSH 密钥:…...

Python 在 JMeter 中如何使用?
要在JMeter中使用Python,需要使用JSR223 Sampler元素来执行Python脚本。使用JSR223 Sampler执行Python脚本时,需要确保已在JMeter中配置了Python解释器,并设置了正确的环境路径。 1、确保JMeter已安装Python解释器,并将解释器的路…...

贪心day1
文章目录 前言雪糕的最大数量重新分装苹果装满石头的背包的最大数量K 次取反后最大化的数组和不同整数的最少数目 前言 💫你好,我是辰chen,本文旨在准备考研复试或就业 💫文章题目大多来自于 leetcode,当然也可能来自洛…...

Redis 完整指南:命令与原理详解
目录 1. Redis 概述什么是 RedisRedis 应用场景 2. 安装与启动Redis 安装步骤源代码安装使用包管理器安装(以 Ubuntu 为例) 编译与启动命令编客户端连接 3. Redis 存储结构KV 存储结构数据结构类型String(字符串)List(…...

【2024软考高级架构师】论文篇——3、论Web系统的测试技术及其应用
【摘要】 本人于2023年8月参与了某地级市的市级机关电子政务信息系统的建设工作,该项目是该市机关的电子政务网建设计划的一部分,笔者在该项目中担任项目经理和系统分析师一职,主要负责项目的日常全面管理和质量保证与质量控制工作。该项目是基于WEB系统的,由于WEB系统具有…...

迪杰斯特拉算法的理解
图片转载自:最短路径算法-迪杰斯特拉(Dijkstra)算法 - 程序小哥爱读书的文章 - 知乎 https://zhuanlan.zhihu.com/p/346558578 迪杰斯特拉,一个广度优先算法,采用了贪心策略。 第一步,选取顶点D,更新和D相连的节点C&a…...

华为OD机试 - 文本统计分析(Python/JS/C/C++ 2024 E卷 200分)
华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…...

计算机挑战赛9
Excel表列名称由字母A~Z组成,列字母的规律如下: A、B、C.、AA、AB....AZ、BA、B...ZZZZY、ZZZZ...输入: 输入包含两个列名称字符串,长度均小于等于5。 输出: 输出两个列名称之间共有多少列 样例输入: AA AZ 样例输出: 24 代码: C&…...

C++学习路线(十六)
void类型指针 void -> 空类型 void* -> 空类型指针,只存储地址的值,丢失类型,无法访问,要访问里面的值 我们必须对指针进行正确的类型转换,然后再间接引用指针 所有其它类型的指针都可以隐式自动转换成 void 类型…...

2024年最受欢迎的AI工具与实际应用:AI技术对未来生活的深远影响
2024年最受欢迎的AI工具与实际应用:AI技术对未来生活的深远影响 随着2024年的到来,人工智能(AI)技术已经深入渗透到我们生活的方方面面。从日常工作到科学研究,AI工具的应用变得越来越广泛。无论是生成式AI工具&#…...

【网络安全】账户安全随笔
未经许可,不得转载。 作者:Enoch 原文出处:https://mp.weixin.qq.com/s/oKBpZ0F6Kl5NNmHSYCYIPw 文章目录 账户类型资金划转问题幂等ID使用错误多接口并发问题精度问题其他划转问题特殊资金盗取问题科学计数法问题账户类型 在互联网金融和电商企业中,账户安全直接关系到用…...

在线培训知识库管理系统:教育行业的新动力
在当今数字化时代,教育行业正经历着前所未有的变革。随着在线教育的兴起,如何高效地管理和传播知识成为了一个关键问题。在线培训知识库管理系统应运而生,它以其强大的知识整合、分享和管理能力,为教育行业注入了新的活力。 一、…...

【AI声音克隆本地整合包及教程】第二代GPT-SoVITS V2:声音克隆的新境界
在数字时代的浪潮中,个性化和创新是永恒的主题。GPT-SoVITS V2,作为第二代声音克隆技术,正以其革命性的特性和应用,为个人和企业打开一扇通往声音个性化的新大门。 声音克隆的新高度 GPT-SoVITS V2是由RVC变声器创始人“花儿不哭…...

博看书苑 8.8.1| 免费阅读海量图书期刊
博看书苑是一款免费的图书和期刊阅读神器,拥有海量的图书和期刊资源,涵盖了文学、历史、科技、教育等多个领域。无论你是想深入研究某个专业领域,还是想在闲暇时阅读一些轻松的读物,博看书苑都能满足你的需求。更令人惊喜的是&…...

导致动态代理无法使用的原因有哪些?
在动态代理的应用过程中,有时会遇到其无法正常使用的情况。这种现象可能源于多种原因,从网络配置到软件设置,了解和解决这些问题对保持代理的高效运行至关重要。本文将详细探讨导致动态代理无法使用的主要原因及对策,以帮助用户及…...

熟练使用Spring Boot、Spring Cloud Alibaba微服务开发框架,并深入理解其原理 学习要求
1. Spring Boot 核心理解 自动配置:了解 Spring Boot 的自动配置原理(EnableAutoConfiguration),包括如何查看和定制自动配置的内容。需要能解释 Spring Boot 如何减少样板代码。Spring Boot Starter:熟悉各种 starte…...

2024-10-09 问AI: [AI面试题] 描述数据预处理在 AI 中的重要性
文心一言 数据预处理在人工智能(AI)中扮演着至关重要的角色,它是构建高效、准确和可靠AI模型不可或缺的步骤。以下是数据预处理在AI中重要性的详细描述: 1. 提高数据质量 清理和去噪:数据预处理可以识别和纠正数据中…...

Linux中文件的理解
✨前言✨ 📘 博客主页:to Keep博客主页 🙆欢迎关注,👍点赞,📝留言评论 ⏳首发时间:2024年10月16日 📨 博主码云地址:渣渣C 📕参考书籍:…...

益安宁丸,国药准字,值得信赖
益安宁丸真品辨别唯一标准 益安宁丸是由同溢堂药业有限公司独家生产的一款中成药,主要用于调理心血管系统,广泛应用于内地市场及港澳地区。由于其疗效显著,益安宁丸在消费者中享有良好的声誉,被誉为心血管健康的守护者。然而&…...

Django项目的创建及说明(详细图解版)
Django项目的创建及说明 1、安装Django2、创建项目2.1、利用终端创建项目2.2、利用Pycharm企业版创建项目 3、默认文件介绍 1、安装Django 在终端输入下述命令行。 pip install django安装成功后执行如下命令查看Django是否安装好,若正确显示出Django版本号则安装…...

MySQL 9从入门到性能优化-二进制日志
【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…...

Cloudlog delete_oqrs_line 未授权SQL注入漏洞复现
0x01 产品简介 Cloudlog 是一个自托管的 PHP 应用程序,可让您在任何地方记录您的业余无线电联系人。使用PHP和MySQL构建的基于Web的业余无线电记录应用程序支持从HF到微波的一般站记录任务 0x02 漏洞概述 Cloudlog delete_oqrs_line 接口存在未授权SQL注入漏洞,未经身份验…...

【Linux】解锁软硬链接奥秘,高效动静态库管理的实战技巧
软硬连接和动静态库 1. 软链接1.1. 概念1.2. 特点1.3. 应用场景 2. 硬链接2.1. 概念2.2. 硬链计数2.3. 特点2.4. 应用场景 3. 动静态库3.1 库存在的原因3.2. 静态库制作与使用3.2.1 打包3.2.2. 使用 3.3. 动态库制作与使用3.3.1. 打包3.3.2. 使用 4. 解决动态库查不到的4种方法…...