C# WPF 一个设计界面
C# WPF 一个设计界面
今天正月初三,大家在家呆着挺好,不要忘了自我充电。
武汉人民加油,今早又有噩耗,24号(8号)一路走好。
阅读导航
- 本文背景
- 代码实现
- 本文参考
- 源码
1. 本文背景
一个不错的界面设计

2. 代码实现
使用 .NET Framework 4.8 创建名为 “Dashboard1” 的WPF模板项目,添加3个Nuget库:MaterialDesignThemes.3.1.0-ci981、MaterialDesignColors.1.2.3-ci981和ModernUICharts.WPF.Beta.0.9.1,ModernUICharts 库用于绘制统计图,此库没有 .NET CORE 版本,所以项目是创建的 .NET Framework 版本。
解决方案主要文件目录组织结构:
- Dashboard1
- App.xaml
- MainWindow.xaml
- MainWindow.xaml.cs
2.1 引入样式
文件【App.xaml】,在 StartupUri 中设置启动的视图【MainWindow.xaml】,并在【Application.Resources】节点增加 MaterialDesignThemes库的样式文件:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.Blue.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Indigo.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
2.2 演示窗体
文件【MainWindow.xaml】,布局代码、统计图MVVM绑定代码都在此文件中,源码如下:
<Window x:Class="Dashboard1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:MetroChart="clr-namespace:De.TorstenMandelkow.MetroChart;assembly=De.TorstenMandelkow.MetroChart"
mc:Ignorable="d" Height="600" Width="1024" ResizeMode="NoResize" WindowStartupLocation="CenterScreen" WindowStyle="None">
<Window.Resources>
<ResourceDictionary>
<Style x:Key="ScrollThumbs" TargetType="{x:Type Thumb}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Thumb}">
<Grid x:Name="Grid">
<Rectangle HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="Auto" Fill="Transparent" />
<Border x:Name="Rectangle1" CornerRadius="10" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="Auto" Background="{TemplateBinding Background}" />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="Tag" Value="Horizontal">
<Setter TargetName="Rectangle1" Property="Width" Value="Auto" />
<Setter TargetName="Rectangle1" Property="Height" Value="7" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!--ScrollBars-->
<Style x:Key="{x:Type ScrollBar}" TargetType="{x:Type ScrollBar}">
<Setter Property="Stylus.IsFlicksEnabled" Value="false" />
<Setter Property="Foreground" Value="LightGray" />
<Setter Property="Background" Value="DarkGray" />
<Setter Property="Width" Value="10" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ScrollBar}">
<Grid x:Name="GridRoot" Width="19" Background="{x:Null}">
<Track x:Name="PART_Track" Grid.Row="0" IsDirectionReversed="true" Focusable="false">
<Track.Thumb>
<Thumb x:Name="Thumb" Background="{TemplateBinding Foreground}" Style="{DynamicResource ScrollThumbs}" />
</Track.Thumb>
<Track.IncreaseRepeatButton>
<RepeatButton x:Name="PageUp" Command="ScrollBar.PageDownCommand" Opacity="0" Focusable="false" />
</Track.IncreaseRepeatButton>
<Track.DecreaseRepeatButton>
<RepeatButton x:Name="PageDown" Command="ScrollBar.PageUpCommand" Opacity="0" Focusable="false" />
</Track.DecreaseRepeatButton>
</Track>
</Grid>
<ControlTemplate.Triggers>
<Trigger SourceName="Thumb" Property="IsMouseOver" Value="true">
<Setter Value="{DynamicResource ButtonSelectBrush}" TargetName="Thumb" Property="Background" />
</Trigger>
<Trigger SourceName="Thumb" Property="IsDragging" Value="true">
<Setter Value="{DynamicResource DarkBrush}" TargetName="Thumb" Property="Background" />
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter TargetName="Thumb" Property="Visibility" Value="Collapsed" />
</Trigger>
<Trigger Property="Orientation" Value="Horizontal">
<Setter TargetName="GridRoot" Property="LayoutTransform">
<Setter.Value>
<RotateTransform Angle="-90" />
</Setter.Value>
</Setter>
<Setter TargetName="PART_Track" Property="LayoutTransform">
<Setter.Value>
<RotateTransform Angle="-90" />
</Setter.Value>
</Setter>
<Setter Property="Width" Value="Auto" />
<Setter Property="Height" Value="12" />
<Setter TargetName="Thumb" Property="Tag" Value="Horizontal" />
<Setter TargetName="PageDown" Property="Command" Value="ScrollBar.PageLeftCommand" />
<Setter TargetName="PageUp" Property="Command" Value="ScrollBar.PageRightCommand" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid Grid.Column="1" Grid.Row="1" Background="#FFCFCFCF">
<ScrollViewer>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="200"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Grid Grid.Column="0">
<Rectangle Height="120" Margin="20" Fill="White" RadiusY="10" RadiusX="10" >
<Rectangle.Effect>
<DropShadowEffect BlurRadius="20" Color="#FFDEDEDE" RenderingBias="Quality" ShadowDepth="1"/>
</Rectangle.Effect>
</Rectangle>
<Grid Margin="25" Height="120">
<Grid Width="35" Height="50" Background="#FFFFAF24" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="20 0">
<Grid.Effect>
<DropShadowEffect BlurRadius="20" Color="#FFECECEC" RenderingBias="Quality" ShadowDepth="1"/>
</Grid.Effect>
<materialDesign:PackIcon Kind="ContentCopy" HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="5" Foreground="White" Width="20" Height="20"/>
</Grid>
<TextBlock Text="使用空间" HorizontalAlignment="Right" FontFamily="Champagne & Limousines" Margin="5" VerticalAlignment="Top" Foreground="Gray"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="10 20">
<TextBlock Text="49/50" FontFamily="Champagne & Limousines" VerticalAlignment="Center" Foreground="Gray" FontSize="50"/>
<TextBlock Text="GB" FontFamily="Champagne & Limousines" Margin="0 5" Foreground="Gray" FontSize="20" VerticalAlignment="Bottom"/>
</StackPanel>
<StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" Margin="20" Cursor="Hand">
<materialDesign:PackIcon Kind="AlertOutline" Foreground="Red" Width="10" Height="10" VerticalAlignment="Center" Margin="5 0"/>
<TextBlock Text="获得更多空间" FontSize="8" Foreground="#FF8522BD"/>
</StackPanel>
</Grid>
</Grid>
<Grid Grid.Column="1">
<Rectangle Height="120" Margin="20" Fill="White" RadiusY="10" RadiusX="10" >
<Rectangle.Effect>
<DropShadowEffect BlurRadius="20" Color="#FFDEDEDE" RenderingBias="Quality" ShadowDepth="1"/>
</Rectangle.Effect>
</Rectangle>
<Grid Margin="25" Height="120">
<Grid Width="35" Height="50" Background="#FF41A43C" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="20 0">
<Grid.Effect>
<DropShadowEffect BlurRadius="20" Color="#FFECECEC" RenderingBias="Quality" ShadowDepth="1"/>
</Grid.Effect>
<materialDesign:PackIcon Kind="Store" HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="5" Foreground="White" Width="20" Height="20"/>
</Grid>
<TextBlock Text="收入" HorizontalAlignment="Right" FontFamily="Champagne & Limousines" Margin="5" VerticalAlignment="Top" Foreground="Gray"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="10 30">
<TextBlock Text="¥" FontFamily="Champagne & Limousines" Margin="0 2" Foreground="Gray" FontSize="20" VerticalAlignment="Bottom"/>
<TextBlock Text="35.674,00" FontFamily="Champagne & Limousines" VerticalAlignment="Center" Foreground="Gray" FontSize="30"/>
</StackPanel>
<StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" Margin="20">
<materialDesign:PackIcon Kind="Calendar" Foreground="Gray" Width="10" Height="10" VerticalAlignment="Center" Margin="5 0"/>
<TextBlock Text="最近24小时" FontSize="8" Foreground="Gray"/>
</StackPanel>
</Grid>
</Grid>
<Grid Grid.Column="2">
<Rectangle Height="120" Margin="20" Fill="White" RadiusY="10" RadiusX="10" >
<Rectangle.Effect>
<DropShadowEffect BlurRadius="20" Color="#FFDEDEDE" RenderingBias="Quality" ShadowDepth="1"/>
</Rectangle.Effect>
</Rectangle>
<Grid Margin="25" Height="120">
<Grid Width="35" Height="50" Background="#FFCF1F1F" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="20 0">
<Grid.Effect>
<DropShadowEffect BlurRadius="20" Color="#FFECECEC" RenderingBias="Quality" ShadowDepth="1"/>
</Grid.Effect>
<materialDesign:PackIcon Kind="InformationOutline" HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="5" Foreground="White" Width="20" Height="20"/>
</Grid>
<TextBlock Text="修正的错误" HorizontalAlignment="Right" FontFamily="Champagne & Limousines" Margin="5" VerticalAlignment="Top" Foreground="Gray"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="10 30">
<TextBlock Text="75" FontFamily="Champagne & Limousines" VerticalAlignment="Center" Foreground="Gray" FontSize="40"/>
</StackPanel>
<StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" Margin="20">
<materialDesign:PackIcon Kind="GithubCircle" Foreground="Gray" Width="10" Height="10" VerticalAlignment="Center" Margin="5 0"/>
<TextBlock Text="Github" FontSize="8" Foreground="Gray"/>
</StackPanel>
</Grid>
</Grid>
<Grid Grid.Row="1" Grid.RowSpan="2" Grid.ColumnSpan="3" HorizontalAlignment="Center" Width="580" Height="510">
<Grid Background="White" Margin="20 50 20 20">
<Grid.OpacityMask>
<VisualBrush Visual="{ Binding ElementName=BorderG1 }"/>
</Grid.OpacityMask>
<Border x:Name="BorderG1" CornerRadius="5" Background="White"/>
<StackPanel VerticalAlignment="Bottom" >
<TextBlock Text="日收入" Margin="10 0" FontFamily="Champagne & Limousines" Foreground="Gray" FontSize="20"/>
<StackPanel Orientation="Horizontal" Margin="20 5">
<materialDesign:PackIcon Kind="ArrowUp" Foreground="Green" VerticalAlignment="Center"/>
<TextBlock Text="55%" FontFamily="Champagne & Limousines" Foreground="Green" FontSize="15"/>
<TextBlock Text="今天的销售增长" Margin="20 0" FontFamily="Champagne & Limousines" Foreground="Gray" FontSize="15"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="10 5">
<materialDesign:PackIcon Kind="Clock" Foreground="Gray" VerticalAlignment="Center"/>
<TextBlock Text="更新到4分钟" Margin="5 0" FontFamily="Champagne & Limousines" Foreground="Gray" FontSize="15"/>
</StackPanel>
</StackPanel>
</Grid>
<Grid Margin="50 20 50 150">
<Grid.OpacityMask>
<VisualBrush Visual="{ Binding ElementName=BorderG2 }"/>
</Grid.OpacityMask>
<Border x:Name="BorderG2" CornerRadius="15" Background="#FF340051"/>
<MetroChart:RadialGaugeChart Background="{x:Null}" ChartTitle="Consumo" ChartSubTitle="" Foreground="LightGray" >
<MetroChart:RadialGaugeChart.Series>
<MetroChart:ChartSeries
DisplayMember="Title"
ItemsSource="{Binding Path=Consumo}"
SeriesTitle="Consumo"
ValueMember="Percent" HorizontalAlignment="Center"/>
</MetroChart:RadialGaugeChart.Series>
</MetroChart:RadialGaugeChart>
</Grid>
</Grid>
</Grid>
</ScrollViewer>
</Grid>
<Grid Grid.Row="1">
<Grid.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="LightGray" Offset="1"/>
<GradientStop Color="#FFE6E6E6"/>
</LinearGradientBrush>
</Grid.Background>
<Grid.RowDefinitions>
<RowDefinition Height="100"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.Effect>
<DropShadowEffect BlurRadius="20" Color="#FFDEDEDE" RenderingBias="Quality" ShadowDepth="1"/>
</Grid.Effect>
<Grid Background="#FFA46FE4">
<Image Source="https://img.dotnet9.com/logo-head.png"/>
</Grid>
<StackPanel Grid.Row="1">
<Button Margin="10" Background="#FF8522BD" BorderBrush="#FF8522BD">
<Grid Width="150">
<materialDesign:PackIcon Kind="ViewDashboard" VerticalAlignment="Center"/>
<TextBlock HorizontalAlignment="Center" Text="仪表盘" FontFamily="Champagne & Limousines"/>
</Grid>
</Button>
<Button Margin="10" Background="#FF8522BD" BorderBrush="#FF8522BD">
<Grid Width="150">
<materialDesign:PackIcon Kind="Account" VerticalAlignment="Center"/>
<TextBlock HorizontalAlignment="Center" Text="概况" FontFamily="Champagne & Limousines"/>
</Grid>
</Button>
<Button Margin="10" Background="#FF8522BD" BorderBrush="#FF8522BD">
<Grid Width="150">
<materialDesign:PackIcon Kind="ContentPaste" VerticalAlignment="Center"/>
<TextBlock HorizontalAlignment="Center" Text="表格" FontFamily="Champagne & Limousines"/>
</Grid>
</Button>
<Button Margin="10" Background="#FF8522BD" BorderBrush="#FF8522BD">
<Grid Width="150">
<materialDesign:PackIcon Kind="TshirtCrew" VerticalAlignment="Center"/>
<TextBlock HorizontalAlignment="Center" Text="产品" FontFamily="Champagne & Limousines"/>
</Grid>
</Button>
<Button Margin="10" Background="#FF8522BD" BorderBrush="#FF8522BD">
<Grid Width="150">
<materialDesign:PackIcon Kind="TruckDelivery" VerticalAlignment="Center"/>
<TextBlock HorizontalAlignment="Center" Text="供应商" FontFamily="Champagne & Limousines"/>
</Grid>
</Button>
<Button Margin="10" Background="#FF8522BD" BorderBrush="#FF8522BD">
<Grid Width="150">
<materialDesign:PackIcon Kind="Settings" VerticalAlignment="Center"/>
<TextBlock HorizontalAlignment="Center" Text="配置" FontFamily="Champagne & Limousines"/>
</Grid>
</Button>
</StackPanel>
</Grid>
<Grid x:Name="GridBarraTitle" Grid.ColumnSpan="2" Background="#FF8522BD" MouseDown="GridBarraTitle_MouseDown">
<TextBlock Text="仪表盘演示标题(https://dotnet9.com)" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White" FontSize="17"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="10,0">
<Button Style="{StaticResource MaterialDesignFloatingActionMiniAccentButton}" Width="25" Height="25" Background="{x:Null}" BorderBrush="{x:Null}" Foreground="White">
<materialDesign:PackIcon Kind="Bell"/>
</Button>
<Button Style="{StaticResource MaterialDesignFloatingActionMiniAccentButton}" Width="25" Height="25" Background="{x:Null}" BorderBrush="{x:Null}" Foreground="White">
<materialDesign:PackIcon Kind="Account"/>
</Button>
<Button x:Name="ButtonFechar" Style="{StaticResource MaterialDesignFloatingActionMiniAccentButton}" Width="25" Height="25" Background="{x:Null}" BorderBrush="{x:Null}" Foreground="White" Click="ButtonFechar_Click">
<materialDesign:PackIcon Kind="Close"/>
</Button>
</StackPanel>
</Grid>
</Grid>
</Window>
窗口布局代码也不多,就是布局和数据绑定,下面是后台代码:文件【MainWindow.xaml.cs】,ViewModel绑定、关闭窗体、窗体移动等事件处理,因为是演示事例,所以写的简单。
using System.Collections.Generic;
using System.Windows;
using System.Windows.Input;
namespace Dashboard1
{
/// <summary>
/// MainWindow.xaml的逻辑交互
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Consumo consumo = new Consumo();
DataContext = new ConsumoViewModel(consumo);
}
private void ButtonFechar_Click(object sender, RoutedEventArgs e)
{
Application.Current.Shutdown();
}
private void GridBarraTitle_MouseDown(object sender, MouseButtonEventArgs e)
{
DragMove();
}
}
internal class ConsumoViewModel
{
public List<Consumo> Consumo { get; private set; }
public ConsumoViewModel(Consumo consumo)
{
Consumo = new List<Consumo>();
Consumo.Add(consumo);
}
}
internal class Consumo
{
public string Title { get; private set; }
public int Percent { get; private set; }
public Consumo()
{
Title = "电量消耗";
Percent = CalcularPercent();
}
private int CalcularPercent()
{
return 47; //消费百分比的计算
}
}
}
3.本文参考
4.源码
演示代码已全部贴上,另可参考原作者配套视频及源码学习,见【3.本文参考】
可运行Demo下载
除非注明,文章均由 Dotnet9 整理发布,欢迎转载。
转载请注明本文地址:https://dotnet9.com/7806.html
欢迎扫描下方二维码关注 Dotnet9 的微信公众号,本站会及时推送最新技术文章
时间如流水,只能流去不流回!
点击《【阅读原文】》,本站还有更多技术类文章等着您哦!!!
此刻顺便为我点个《【再看】》可好?
C# WPF 一个设计界面的更多相关文章
- 少量代码设计一个登录界面(二) – .NET CORE(C#) WPF开发
微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. 阅读导航 本文背景 代码实现 本文参考 源码 1. 本文背景 同上篇文章<少量代码设计一 ...
- 少量代码设计一个登录界面 - .NET CORE(C#) WPF开发
微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. 少量代码设计一个登录界面 - .NET CORE(C#) WPF开发 阅读导航 本文背景 代码 ...
- WPF设计界面不执行代码
一般在我们在设计WPF XAML界面时,XAML 引用一些后端的类.比如UserControl.Converter.MVVM,引用 xmlns:ALLUserControl="clr-nam ...
- winform设计一个登录界面和修改密码的界面-自动切换窗体(问题[已解] 望一起讨论)(技术改变世界-cnblog)
http://www.cnblogs.com/IAmBetter/archive/2012/01/14/2322156.html winform设计一个登录界面和修改密码的界面-自动切换窗体(问题[已 ...
- 使用Axure RP原型设计实践03,制作一个登录界面的原型
本篇体验做一个登录界面的原型. 登录页 首先在Page Style里为页面设置背景色. 如果想在页面中加图片,就把Image部件拖入页面,并设置x和y轴.双击页面中的Image部件可以导入图片.在Im ...
- Wix 安装部署教程(九) --用WPF做安装界面
经常安装PC端的应用,特别是重装系统之后,大致分为两类.一类像QQ,搜狗输入法这样的.分三步走的:第一个页面可以自定义安装路径和软件许可.第二个页面显示安装进度条,第三个页面推荐其他应用.先不管人家怎 ...
- 在Eclipse中用SWT设计界面
摘自http://www.tulaoshi.com/n/20160129/1488574.html 在Eclipse中用SWT设计界面 1. 为什么要使用SWT? SWT是一个IBM开发的跨平台GU ...
- WPF模拟雷达界面效果图
原文:WPF模拟雷达界面效果图 iPad塔防的防守兵的效果很炫,2个小时用WPF模拟了一个. 效果图: 关键代码: <Grid> <Grid.Background> <I ...
- WPF 一个简单的颜色选择器
原文:WPF 一个简单的颜色选择器 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/8340999 ...
随机推荐
- Canny边缘检测算法(基于OpenCV的Java实现)
目录 Canny边缘检测算法(基于OpenCV的Java实现) 绪论 Canny边缘检测算法的发展历史 Canny边缘检测算法的处理流程 用高斯滤波器平滑图像 彩色RGB图像转换为灰度图像 一维,二维 ...
- jQuery学习总结(三)
这篇文章讲的是jQuery里的ajax发送data的三种方式,利用ajax发送数据的好处是把数据发送到了servlet后,当前页面不进行跳转. jQuery的里的ajax发送data的方式主要有三种, ...
- FTP服务后门利用
开门见山 1. 扫描同网段的靶场机,发现PCS,192.168.31.137 2. 扫描靶场机服务信息和服务版本 3. 快速扫描靶场机全部信息 4. 发现开放ftp服务,并扫描此ftp软件版本是否存在 ...
- 利用http协议使用普通的网站虚拟主机+安信可A6C GPRS模块实现对stm32的远程升级
步骤: 1.生成bin文件并将bin文件放到虚拟主机目录内 2.做一个php的页面分块读取该bin文件,以asc字符echo出来,并标记好头尾长度和校验. 3.GPRS协议栈连接主机路径,收到内容,将 ...
- Leetcode 题目整理-7 Remove Element & Implement strStr()
27. Remove Element Given an array and a value, remove all instances of that value in place and retur ...
- vuex之getter(二)
说明 使用vue,如果想对data数据派生一些状态,我们就用到计算属性或者侦听器,同样vux想要派生state中的一些状态,可以在store中定义一个getters属性,它相当于state的计算属性. ...
- ProxySQL 基础篇
1.ProxySQL 介绍 ProxySQL 是基于 MySQL 的一款开源的中间件的产品,是一个灵活的 MySQL 代理层,可以实现读写分离,支持 Query 路由功能,支持动态指定某个 SQL 进 ...
- OpenStack之虚拟机热迁移
这里的环境是centos7版本,openstack K版 1.在各个计算节点设置权限 chmod /var/lib/nova/instances 2.修改各个节点的nova.conf(/etc/nov ...
- Ceph 存储集群2-配置:心跳选项、OSD选项、存储池、归置组和 CRUSH 选项
一.心跳选项 完成基本配置后就可以部署.运行 Ceph 了.执行 ceph health 或 ceph -s 命令时,监视器会报告 Ceph 存储集群的当前状态.监视器通过让各 OSD 自己报告.并接 ...
- LinearLayout中组件右对齐
在LinearLayout中,如果将其定位方向设为横向排列:android:orientation="horizontal",那么这个布局中的控件将自左向右排列. 但有时会有这样的 ...
