WPF MaterialDesign 初学项目实战(1)首页搭建

news2024/11/27 16:28:22

前言

最近在学WPF,由于人比较烂,有一个星期没怎么动代码了。感觉有点堕落。现在开始记录WPF项目,使用MaterialDesignInXamlToolkit。

环境搭建

如果没下载MaterialDesign 的源码
github源码运行

在Nuget里面引入MaterialDesign
在这里插入图片描述

MaterialDesign控件简介

项目运行成功之后左边的列表就是提供的控件的列表
在这里插入图片描述
仔细看的话提供的控件非常的完整,消息提示,弹出层,手风琴,面包屑,卡片等。常用的都具备了。

这里顺便说一下,前端的UI一般是+UI框架+统计图解决。
例如:

  • Vue
    • Elemnent-ui
    • ECharts
  • Uniapp
    • uView
    • uChart

这个框架还挺好看的,但是没有提供统计图的方法。我去NuGet上面搜了一下,发现了统计图。

在这里插入图片描述
看了一下官网
在这里插入图片描述
不知道要不要收费,等这个结束了我去学一下这个统计图的UI。基本前端的UI就这些了。

如何自己新建一个项目

Prism基础搭建

新建WPF项目程序
在这里插入图片描述

引入命名空间:
在App.xmal里面添加为:

<prism:PrismApplication x:Class="MyToDo.App" //将Application改为prism下面的Application.注意:这里的prism:PrismApplication没有代码提示,但是有是否正确提示。输入完全之后就没有波浪线提醒
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:MyToDo"
             xmlns:prism="http://prismlibrary.com/"//引入prism的命名空间
             
             StartupUri="MainWindow.xaml">
    <Application.Resources>
         
    </Application.Resources>
</prism:PrismApplication>

主函数继承关系:
App继承:PrismApplication,但是代码提示可能会有延迟
在这里插入图片描述

可以通过重新生成文件来修复代码提示BUG
在这里插入图片描述

初始化App.xmal

using Prism.DryIoc;
using Prism.Ioc;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;

namespace MyToDo
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : PrismApplication
    {
        /// <summary>
        /// 重写运行主窗口
        /// </summary>
        /// <returns></returns>
        /// <exception cref="NotImplementedException"></exception>
        protected override Window CreateShell()
        {
            //重定向主窗口
            return Container.Resolve<MainWindow>();
            
        }

        /// <summary>
        /// 依赖注入
        /// </summary>
        /// <param name="containerRegistry"></param>
        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
           
        }
    }
}

Ui资源引入
在这里插入图片描述
打开github网址

在这里插入图片描述

在Github上面选择Wiki
在这里插入图片描述

选择快速开始此项目
在这里插入图片描述

将代码复制粘贴

App.xmal

<prism:PrismApplication x:Class="MyToDo.App"
                        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                        xmlns:local="clr-namespace:MyToDo"
                        xmlns:prism="http://prismlibrary.com/"
                        xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
                        StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <materialDesign:BundledTheme BaseTheme="Light"
                                             PrimaryColor="DeepPurple"
                                             SecondaryColor="Lime" />
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</prism:PrismApplication>


MainWindow.xmal

<Window x:Class="MyToDo.MainWindow"
        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:MyToDo"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800"
        xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
        TextElement.Foreground="{DynamicResource MaterialDesignBody}"
        TextElement.FontWeight="Regular"
        TextElement.FontSize="13"
        TextOptions.TextFormattingMode="Ideal"
        TextOptions.TextRenderingMode="Auto"
        Background="{DynamicResource MaterialDesignPaper}"
        FontFamily="{DynamicResource MaterialDesignFont}">
    <Grid>
        <StackPanel>
            <materialDesign:Card Padding="32"
                                 Margin="16">
                <TextBlock Style="{DynamicResource MaterialDesignHeadline6TextBlock}">My First Material Design App</TextBlock>
            </materialDesign:Card>
        </StackPanel>
    </Grid>
</Window>

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

照着Demo写UI

读书人的事情,那能叫偷吗?
使用Github上面的源码
github源码运行
在这里插入图片描述

首页导航栏框架

找到主窗体控件
在这里插入图片描述
将Ui代码复制

在这里插入图片描述
粘贴之后显示是无效代码,因为我们没有引入命名空间
在这里插入图片描述
引入命名空间
xmlns:materialDesign=“http://materialdesigninxaml.net/winfx/xaml/themes”
在这里插入图片描述
将代码中报错的删除
在这里插入图片描述

我们就抄好了源码的首页
在这里插入图片描述
Ui整体逻辑

  • materialDesign:DialogHost:materialDesignUi框架,我试过删除了第一层对显示效果没有任何影响
    • materialDesign:DialogHost:第二层Ui
    • materialDesign:DrawerHost.LeftDrawerContent:左侧列表(删除)
    • DockPanel:
      • materialDesign:ColorZone :顶部导航栏
      • Grid:中间主内容(删除)

最终效果

<Window x:Class="MyToDo.MainWindow"
        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:MyToDo"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800"
        xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
       
        TextElement.Foreground="{DynamicResource MaterialDesignBody}"
        TextElement.FontWeight="Regular"
        TextElement.FontSize="13"
        TextOptions.TextFormattingMode="Ideal"
        TextOptions.TextRenderingMode="Auto"
        Background="{DynamicResource MaterialDesignPaper}"
        FontFamily="{DynamicResource MaterialDesignFont}">
    <materialDesign:DialogHost DialogTheme="Inherit"
                               Identifier="RootDialog"
                               SnackbarMessageQueue="{Binding ElementName=MainSnackbar, Path=MessageQueue}">

        <materialDesign:DrawerHost IsLeftDrawerOpen="{Binding ElementName=MenuToggleButton, Path=IsChecked}">
            <materialDesign:DrawerHost.LeftDrawerContent>
                <DockPanel MinWidth="220">

                </DockPanel>
            </materialDesign:DrawerHost.LeftDrawerContent>

            <DockPanel>
                <materialDesign:ColorZone Padding="16"
                                          materialDesign:ElevationAssist.Elevation="Dp4"
                                          DockPanel.Dock="Top"
                                          Mode="PrimaryMid">
                    <DockPanel>
                        <StackPanel Orientation="Horizontal">
                            <ToggleButton x:Name="MenuToggleButton"
                                          AutomationProperties.Name="HamburgerToggleButton"
                                          Click="MenuToggleButton_OnClick"
                                          IsChecked="False"
                                          Style="{StaticResource MaterialDesignHamburgerToggleButton}" />

                            <Button Margin="24,0,0,0"
                                    materialDesign:RippleAssist.Feedback="{Binding RelativeSource={RelativeSource Self}, Path=Foreground, Converter={StaticResource BrushRoundConverter}}"
                                    Command="{Binding MovePrevCommand}"
                                    Content="{materialDesign:PackIcon Kind=ArrowLeft,
                                                        Size=24}"
                                    Foreground="{Binding RelativeSource={RelativeSource AncestorType={x:Type FrameworkElement}}, Path=(TextElement.Foreground)}"
                                    Style="{StaticResource MaterialDesignToolButton}"
                                    ToolTip="Previous Item" />

                            <Button Margin="16,0,0,0"
                                    materialDesign:RippleAssist.Feedback="{Binding RelativeSource={RelativeSource Self}, Path=Foreground, Converter={StaticResource BrushRoundConverter}}"
                                    Command="{Binding MoveNextCommand}"
                                    Content="{materialDesign:PackIcon Kind=ArrowRight,
                                                        Size=24}"
                                    Foreground="{Binding RelativeSource={RelativeSource AncestorType={x:Type FrameworkElement}}, Path=(TextElement.Foreground)}"
                                    Style="{StaticResource MaterialDesignToolButton}"
                                    ToolTip="Next Item" />

                            <Button Margin="16,0,0,0"
                                    materialDesign:RippleAssist.Feedback="{Binding RelativeSource={RelativeSource Self}, Path=Foreground, Converter={StaticResource BrushRoundConverter}}"
                                    Command="{Binding HomeCommand}"
                                    Content="{materialDesign:PackIcon Kind=Home,
                                                        Size=24}"
                                    Foreground="{Binding RelativeSource={RelativeSource AncestorType={x:Type FrameworkElement}}, Path=(TextElement.Foreground)}"
                                    Style="{StaticResource MaterialDesignToolButton}"
                                    ToolTip="Home" />
                        </StackPanel>

                        <materialDesign:PopupBox DockPanel.Dock="Right"
                                                 PlacementMode="BottomAndAlignRightEdges"
                                                 StaysOpen="False">

                            <StackPanel>
                                <Grid Margin="10">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="Auto" />
                                        <ColumnDefinition Width="Auto" />
                                        <ColumnDefinition Width="Auto" />
                                    </Grid.ColumnDefinitions>
                                    <Grid.RowDefinitions>
                                        <RowDefinition />
                                        <RowDefinition />
                                        <RowDefinition />
                                    </Grid.RowDefinitions>
                                    <TextBlock Margin="0,0,10,0"
                                               Text="Light" />
                                    <ToggleButton x:Name="DarkModeToggleButton"
                                                  Grid.Column="1"
                                                  Click="MenuDarkModeButton_Click" />
                                    <TextBlock Grid.Column="2"
                                               Margin="10,0,0,0"
                                               Text="Dark" />
                                    <TextBlock Grid.Row="1"
                                               Margin="0,10,10,0"
                                               Text="Enabled" />
                                    <ToggleButton x:Name="ControlsEnabledToggleButton"
                                                  Grid.Row="1"
                                                  Grid.Column="1"
                                                  Margin="0,10,0,0"
                                                  IsChecked="{Binding ControlsEnabled}" />

                                    <TextBlock Grid.Row="2"
                                               Margin="0,10,10,0"
                                               Text="LTR" />
                                    <ToggleButton x:Name="FlowDirectionToggleButton"
                                                  Grid.Row="2"
                                                  Grid.Column="1"
                                                  Margin="0,10,0,0"
                                                  Click="FlowDirectionButton_Click" />
                                    <TextBlock Grid.Row="2"
                                               Grid.Column="2"
                                               Margin="10,10,0,0"
                                               Text="RTL" />
                                </Grid>

                                <Separator />

                                <Button Click="MenuPopupButton_OnClick"
                                        Content="Hello World" />

                                <Button Click="MenuPopupButton_OnClick"
                                        Content="Nice Popup" />

                                <Button Content="Can't Touch This"
                                        IsEnabled="False" />

                                <Separator />

                                <Button Click="MenuPopupButton_OnClick"
                                        Content="Goodbye" />
                            </StackPanel>
                        </materialDesign:PopupBox>

                        <TextBlock Margin="-152,0,0,0"
                                   HorizontalAlignment="Center"
                                   VerticalAlignment="Center"
                                   AutomationProperties.Name="Material Design In XAML Toolkit"
                                   FontSize="22"
                                   Text="Material Design In XAML Toolkit" />
                    </DockPanel>
                </materialDesign:ColorZone>

            </DockPanel>
        </materialDesign:DrawerHost>
    </materialDesign:DialogHost>
</Window>


首页导航栏细化

将框架搭好了之后就是细化了

现在直接启动会报错,因为我们没有定义Button上面的按钮事件。语法不报错,但是编译会报错。
在这里插入图片描述
边框去掉
‘+’添加代码,‘-’删除代码。后面不再说明

<Window x:Class="MyToDo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
.......
       + WindowStyle="None" //取消窗口边框
       + WindowStartupLocation="CenterScreen"//启动时在显示屏中间

        ......
>

其他的就不写了,就是把没用到的删除了,下面是修改好的代码

<Window x:Class="MyToDo.MainWindow"
        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:MyToDo"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800"
        xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
       
        TextElement.Foreground="{DynamicResource MaterialDesignBody}"
        TextElement.FontWeight="Regular"
        TextElement.FontSize="13"
        TextOptions.TextFormattingMode="Ideal"
        TextOptions.TextRenderingMode="Auto"
        WindowStartupLocation="CenterScreen"
        WindowStyle="None"
        Background="{DynamicResource MaterialDesignPaper}"
        FontFamily="{DynamicResource MaterialDesignFont}">
    <materialDesign:DialogHost DialogTheme="Inherit"
                               Identifier="RootDialog"
                               SnackbarMessageQueue="{Binding ElementName=MainSnackbar, Path=MessageQueue}">

        <materialDesign:DrawerHost IsLeftDrawerOpen="{Binding ElementName=MenuToggleButton, Path=IsChecked}">
            <materialDesign:DrawerHost.LeftDrawerContent>
                <DockPanel MinWidth="220">

                </DockPanel>
            </materialDesign:DrawerHost.LeftDrawerContent>

            <DockPanel>
                <materialDesign:ColorZone Padding="16"
                                          materialDesign:ElevationAssist.Elevation="Dp4"
                                          DockPanel.Dock="Top"
                                          Mode="PrimaryMid">
                    <DockPanel>
                        <StackPanel Orientation="Horizontal">
                            <ToggleButton x:Name="MenuToggleButton"
                                          AutomationProperties.Name="HamburgerToggleButton"
                                          IsChecked="False"
                                          Style="{StaticResource MaterialDesignHamburgerToggleButton}" />

                            <Button Margin="24,0,0,0"
                                    materialDesign:RippleAssist.Feedback="{Binding RelativeSource={RelativeSource Self}, Path=Foreground, Converter={StaticResource BrushRoundConverter}}"
                                    Command="{Binding MovePrevCommand}"
                                    Content="{materialDesign:PackIcon Kind=ArrowLeft,
                                                        Size=24}"
                                    Foreground="{Binding RelativeSource={RelativeSource AncestorType={x:Type FrameworkElement}}, Path=(TextElement.Foreground)}"
                                    Style="{StaticResource MaterialDesignToolButton}"
                                    ToolTip="Previous Item" />

                            <Button Margin="16,0,0,0"
                                    materialDesign:RippleAssist.Feedback="{Binding RelativeSource={RelativeSource Self}, Path=Foreground, Converter={StaticResource BrushRoundConverter}}"
                                    Command="{Binding MoveNextCommand}"
                                    Content="{materialDesign:PackIcon Kind=ArrowRight,
                                                        Size=24}"
                                    Foreground="{Binding RelativeSource={RelativeSource AncestorType={x:Type FrameworkElement}}, Path=(TextElement.Foreground)}"
                                    Style="{StaticResource MaterialDesignToolButton}"
                                    ToolTip="Next Item" />


                            <TextBlock Margin="25,0,0,0"
                                       HorizontalAlignment="Center"
                                       VerticalAlignment="Center"
                                       AutomationProperties.Name="Material Design In XAML Toolkit"
                                       FontSize="22"
                                       Text="笔记本" />
                        </StackPanel>


                        
                    </DockPanel>
                </materialDesign:ColorZone>

            </DockPanel>
        </materialDesign:DrawerHost>
    </materialDesign:DialogHost>
</Window>


运行效果

在这里插入图片描述
还凑合,现在已经有模有样了。

结尾

Ok,你现在已经做的有模有样了,接下来接着修改吧

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

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

相关文章

数字孪生技术在环境保护领域怎样应用?

近年来&#xff0c;环境保护成为全球范围内的热点话题&#xff0c;各国都在积极探索创新的解决方案。其中&#xff0c;数字孪生技术的出现为环境保护带来了全新的机遇和挑战。数字孪生技术将物理世界与数字世界相结合&#xff0c;通过精确的模拟和实时数据分析&#xff0c;为环…

华为ensp 防火墙的基础配置

拓扑图&#xff1a; [FW3-zone-isp1]set priority 12 #配置防火墙优先级 步骤一 #首先进入防火墙需要输入默认账号和密码&#xff0c;必须修改密码。 [USG6000V1] undo in en #关闭提示。 #先配置ip。 [USG6000V1]ip route-static 0.0.0.0 0.0.0.0 64.1.1.10 #配置去往外网的默…

【Redis】Redisson入门以及Redisson可重入锁的lua脚本实现

目录 一、Redisson介绍 二、Redisson的入门 1、引入依赖 2、配置客户端 3、使用锁 三、Redisson可重入锁的原理 1、原理 2、实现 3、lua脚本保证原子性 1.获取锁 2.释放锁 一、Redisson介绍 在之前的文章里我们通过redis中的setn实现了一个简单的分布式锁以及解决了…

远程协助软件推荐,有哪些远程协助工具?

Win10、11自带远程协助工具-快速助手 Win10、11的快速助手使用非常简单。只要在左下角的搜索框搜索一下就可以找到了。 我们都知道&#xff0c;Windows带有远程桌面RDP功能&#xff0c;而快速助手是通过Windows的远程连接机制实现的。所以在使用前&#xff0c;被控端需要开启系…

谈薪谈蹦了,阿里HR说我不配21K....

好家伙&#xff0c;这奇葩事可真是多&#xff0c;前两天和粉丝聊天&#xff0c;他说前段时间面试阿里的测开岗&#xff0c;最后和面试官干起来了。 我问他为什么&#xff0c;他说没啥&#xff0c;就觉得面试官太装了&#xff0c;我说要24K&#xff0c;他说太高了&#xff0c;说…

Kyligence Zen 产品体验——超好用指标平台一站式体验教程

目录 背景介绍Kyligence Zen介绍上手指南数据概览可视化图表 自定义数据新建表新建视图 指标体验目标仪表盘集成优点个人建议体验总结每文一语 背景介绍 在数字化建设初期&#xff0c;许多企业主要采用基于商业智能&#xff08;BI&#xff09;报表的方式来处理数据&#xff0c…

杨红春没有“雷军”,良品铺子“高端”之路焦虑

文 | 螳螂观察 作者 | 图霖 如果休闲零食赛道要评一个六边形战士&#xff0c;良品铺子绝对是个不错的候选人。 尽管搭乘电商的风头起势&#xff0c;但得益于早期线下开店的经验&#xff0c;成功实现了两条腿走路。最新年报显示&#xff0c;其2022年线上收入占比为50.42%&…

《统计学习方法》——隐马尔可夫模型(上)

引言 隐马尔可夫模型(Hidden Markov Model,HMM)是描述隐藏的马尔可夫链随机生成观测数据过程的模型。 前置知识 马尔可夫链 马尔可夫链(Markov chain)又称离散时间马尔可夫链&#xff0c;使用 t t t来表示时刻&#xff0c;用 X t X_t Xt​来表示在时刻 t t t链的状态&#…

( 位运算 ) 338. 比特位计数 ——【Leetcode每日一题】

❓338. 比特位计数 难度&#xff1a;简单 给你一个整数 n &#xff0c;对于 0 < i < n 中的每个 i &#xff0c;计算其二进制表示中 1 的个数 &#xff0c;返回一个长度为 n 1 的数组 ans 作为答案。 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;[0,1,…

JavaScript变量声明

声明变量三个var let和const 1.首先var先排除&#xff0c;老派写法&#xff0c;问题很多&#xff0c;可以淘汰掉… 2.const优先&#xff0c;尽量使用const,原因&#xff1a; &#xff08;1&#xff09;const语义化更好 &#xff08;2&#xff09;很多变量声明的时候就知道它不会…

中本聪思想精髓难以领悟?Web3实际上还在“幻想”之中?

Web3概念是不错&#xff0c;有人说它是下一代互联网&#xff0c;有人说它是NFT和元宇宙等未来应用的基础设施。然而理论炒得火热&#xff0c;但却仍不见像ChatGPT一样能引爆市场的杀手级应用出现。 原因在于&#xff0c;当前的Web3概念是对中本聪思想的不断概括和提炼&#xff…

21 KVM管理虚拟机-在线修改虚拟机配置

文章目录 21 KVM管理虚拟机-在线修改虚拟机配置21.1 概述21.2 操作步骤 21 KVM管理虚拟机-在线修改虚拟机配置 21.1 概述 虚拟机创建之后用户可以修改虚拟机的配置信息&#xff0c;称为在线修改虚拟机配置。在线修改配置以后&#xff0c;新的虚拟机配置文件会被持久化&#x…

高通410 随身WIFI刷入Debian系统(玩法合集)

引言 刚接触到这个项目是在b站上&#xff0c;刷到一位UP主的视频&#xff1a;https://b23.tv/xAFWiTF 其实现了在搭载高通410芯片的随身WIFI烧录linux系统&#xff0c;并在上面部署了chatGPT-Next网站服务。 本人参考的教程链接和其教程所有工具&#xff1a;https://pan.bai…

域名历史查询-免费批量域名历史快照注册时间查询软件

域名历史查询 域名历史查询是指通过查询工具&#xff0c;查询一个域名在过去的历史记录&#xff0c;包括注册时间、过期时间、更改记录、备案信息、WHOIS信息、IP记录、Alexa排名、流量统计等方面。通过查询域名的历史信息&#xff0c;研究者可以了解域名过去的状态&#xff0…

Map与Set中的两大实现类✌

map与set中的两大实现类 map和setSet的两种常用形态Map的两种常用形态实战&#x1f4aa; map和set 哈希表&#xff08;hashMap&#xff09;和 集合 (Set)是数据结构中比较常用的一部分&#xff0c;他们的特性通常可以解决很多问题&#xff0c;这两个数据结构是同根生&#xff…

Python开发之实现SG滤波

Python开发之实现SG滤波 1 SG滤波2 借助Python中的scipy.signal库实现SG滤波3 手动代码实现SG滤波 前言&#xff1a;主要介绍SG滤波的Python实现&#xff0c;顺带介绍SG滤波的实现原理。 1 SG滤波 Savitzky-Golay滤波器&#xff08;通常简称为S-G滤波器&#xff09;最初由Savi…

一百一十六、Zeppelin——Zeppelin0.9.0连接ClickHouse21.9.5.16(亲测有效,附步骤截图)

版本&#xff1a;Zeppelin0.9.0 ClickHouse21.9.5.16 1.目标&#xff1a;Zeppelin连上clickhouse&#xff0c;可以把clickhouse中的数据做可视化展示 2.参考文件&#xff1a;如何基于zeppelin JDBC Interpreter进行jdbc数据源的可视化交互分析 http://t.csdn.cn/DGH…

数智融合 | 美格智能助力AIGC产业迈向新未来

5月11日&#xff0c;在2023 “高通&美格智能物联网技术开放日”深圳站活动上&#xff0c;美格智能副总经理金海斌以《数智引领 融合创新》为题分享了5GAIoT技术赋能的价值展望。 ▲美格智能副总经理 金海斌 ▌算力&#xff1a;数字经济时代的“石油” 今年&#xff0c;由C…

Spring Boot 拦截器

Spring Boot 拦截器介绍 Spring Boot 拦截器是 AOP 的一种实现&#xff0c;专门拦截对控制层的请求&#xff0c;主要应用于判断用户权限&#xff0c;拦截webSocket请求。SpringBoot中的拦截器实现和spring mvc 中是一样的&#xff0c;它的大致流程是&#xff0c;先自己定义一个…

软件测试注意面试官的常规“套路”

一、自我介绍 这里就不过多阐述了&#xff0c;相信很多小伙伴都有。 二、灵活问题 1、大概说说之前公司的测试流程。 2、测试报告有哪些内容? 3、如何保证用例的覆盖度? 4、什么是测试用例,什么是测试脚本?两者的关系&#xff1f; 5、Bug的级别&#xff0c;按照什么划…