Avalonia常用小控件Charts

news2025/4/28 12:44:08
1.项目下载地址:https://gitee.com/confusedkitten/avalonia-demo
2.UI库Semi.Avalonia,项目地址  https://github.com/irihitech/Semi.Avalonia

3.Charts库,LiveChartsCore.SkiaSharpView.Avalonia,Nuget获取只有预览库,也没找到别的啥好用的库

4.样式预览:

5.Charts.axaml

<UserControl xmlns="https://github.com/avaloniaui"
             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"
             mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
             xmlns:lvc="using:LiveChartsCore.SkiaSharpView.Avalonia"
			 xmlns:vm="using:AvaloniaDemo.ViewModels"
			 x:Class="AvaloniaDemo.Pages.Charts"
			 x:DataType="vm:StatisticsViewModel">
	<Grid RowDefinitions="*,*">
		<lvc:PieChart Name="ryredpie" FontFamily="Microsoft YaHei" Series="{Binding DamageSeries}" LegendPosition="Right" >
		</lvc:PieChart>
		<lvc:CartesianChart  Name="ryredaxisx" Grid.Row="1"  Series="{Binding VictorySeries}" XAxes="{Binding VictoryXAxes}">
			<lvc:CartesianChart.Tooltip>
				<vm:CustomTooltip></vm:CustomTooltip>
			</lvc:CartesianChart.Tooltip>
		</lvc:CartesianChart>
	</Grid>
</UserControl>

6.Charts.axaml.cs 

using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using AvaloniaDemo.ViewModels;
using LiveChartsCore.Measure;
using LiveChartsCore.SkiaSharpView.Painting;
using LiveChartsCore.SkiaSharpView.SKCharts;
using SkiaSharp;
using System.Reflection.Metadata;

namespace AvaloniaDemo.Pages;

public partial class Charts : UserControl
{
    public const string DefaultFontFamily = "Microsoft YaHei";
    private StatisticsViewModel viewModel = new StatisticsViewModel(new SolidColorPaint(SKColor.Parse("#4992FF")));
    public Charts()
    {
        InitializeComponent();
        DataContext = viewModel;
        InitLegend();
    }

    /// <summary>
    /// 改图例字体,默认不支持中文
    /// </summary>
    private void InitLegend()
    {
        try
        {
            if (ryredpie.Legend is SKDefaultLegend skDefaultLegend)
            {
                skDefaultLegend.TextSize = 13;
                if (skDefaultLegend.FontPaint is Paint paint)
                {
                    paint.FontFamily = Constant.DefaultFontFamily;
                    paint.Color = new SKColor(255, 255, 255);
                }
            }
            if (ryredpie.Tooltip is SKDefaultTooltip skDefaultTooltip)
            {
                if (skDefaultTooltip.FontPaint is Paint paint)
                {
                    paint.FontFamily = Constant.DefaultFontFamily;
                    paint.Color = new SKColor(255, 255, 255);
                }
            }
            ryredpie.TooltipPosition = TooltipPosition.Right;
        }
        catch { }
    }
}

 7.StatisticsViewModel.cs

using LiveChartsCore.Drawing;
using LiveChartsCore.SkiaSharpView.Painting;
using LiveChartsCore.SkiaSharpView;
using LiveChartsCore;
using SkiaSharp;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;

namespace AvaloniaDemo.ViewModels
{
    public class StatisticsViewModel : ViewModelBase
    {
        SolidColorPaint _solidColor { get; set; } = new SolidColorPaint(SKColor.Parse("#4992FF"));
        public StatisticsViewModel(SolidColorPaint solidColor)
        {
            _solidColor = solidColor;
            ((ColumnSeries<int>)_VictorySeries.ElementAt(0)).Fill = _solidColor;
        }

        public StatisticsViewModel()
        {
        }
        /// <summary>
        /// 饼图内径
        /// </summary>
        public static int PieInnerRadius = 35;

        #region 统计

        public Axis[] VictoryXAxes { get; set; } =
        {
            new Axis
            {
                Labels = new[] { "正常", "轻伤", "中伤", "重伤", "死亡" },
                LabelsRotation = 0,
                LabelsPaint=new SolidColorPaint(new SKColor(255, 255, 255))
                {
                    FontFamily="Microsoft YaHei",
                },
                TextSize=12,
                LabelsAlignment=Align.Middle,
                TicksPaint = new SolidColorPaint(new SKColor(35, 35, 35)),
                TicksAtCenter = true,
                MinStep = 1,
                ForceStepToMin = true,
            }
        };

        private ObservableCollection<ISeries> _VictorySeries = new ObservableCollection<ISeries>
         {
             new ColumnSeries<int> { Values = new int[] { 5,8,1,0,9 },Fill=  new SolidColorPaint(SKColor.Parse("#4992FF"))},
         };

        private ISeries[] _DamageSeries = new ISeries[]
         {
             new PieSeries<int> { Values = new int[] { 2 }, Name = "正常" ,InnerRadius=PieInnerRadius, Fill=  new SolidColorPaint(SKColor.Parse("#008000"))},
             new PieSeries<int> { Values = new int[] { 4 }, Name = "轻伤" ,InnerRadius=PieInnerRadius, Fill=  new SolidColorPaint(SKColor.Parse("#D2C86B")) },
             new PieSeries<int> { Values = new int[] { 1 }, Name = "中伤" ,InnerRadius=PieInnerRadius, Fill=  new SolidColorPaint(SKColor.Parse("#03AEDE")) },
             new PieSeries<int> { Values = new int[] { 4 }, Name = "重伤" ,InnerRadius=PieInnerRadius, Fill=  new SolidColorPaint(SKColor.Parse("#C13530")) },
             new PieSeries<int> { Values = new int[] { 3 }, Name = "死亡" ,InnerRadius=PieInnerRadius, Fill=  new SolidColorPaint(SKColor.Parse("#696969")) }
         };

        public ObservableCollection<ISeries> VictorySeries
        {
            get => _VictorySeries;
            set => RaiseAndSetIfChanged(ref _VictorySeries, value);
        }

        public ISeries[] DamageSeries
        {
            get => _DamageSeries;
            set => RaiseAndSetIfChanged(ref _DamageSeries, value);
        }

        #endregion
    }
}

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

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

相关文章

Vue3模块找不到问题解决:找不到模块‘vue ‘。你的意思是将“模块解决方案”选项设置为“节点”,还是添加ali

Vue3 vite 项目引入 vue 报错 Cannot find module ‘vue‘. Did you mean to set the ‘moduleResolution‘ option to ‘node‘, or to add ali 在项目中找到 tsconfig.json 文件 找到配置项里的 "moduleResolution": "bundler", 将其改成 &q…

简述WPF中MVVM的设计思想

近年来&#xff0c;随着WPF在生产、制造、工控等领域应用越来越广泛&#xff0c;对WPF的开发需求也在逐渐增多&#xff0c;有很多人不断的从Web、WinForm开发转向了WPF开发。 WPF开发有很多新的概念及设计思想&#xff0c;如数据驱动、数据绑定、依赖属性、命令、控件模板、数…

win10 配置静态IP脚本

静态IP配置方法&#xff1a; 1、新建一个txt文本&#xff0c;加入以下代码 netsh interface ip set address name"以太网" sourcestatic addr192.168.101.11 mask255.255.255.0 gateway192.168.101.12、将TXT另存为ANSI编码&#xff01;将TXT另存为ANSI编码&#x…

2023年中国舞台烟雾机产量、销量及市场规模分析[图]

舞台烟雾机是一种用于舞台表演和演出的设备&#xff0c;它能够产生各种形式的烟雾效果&#xff0c;以增强舞台表演的视觉效果和氛围。舞台烟雾机通常由气泵、烟雾发生器、控制器和烟雾管道等组成&#xff0c;可以通过控制器调节烟雾的浓度、颜色和流量&#xff0c;以满足不同演…

C++ 位图与布隆过滤器

目录 前言位图场景演示应用场景模拟实现问题例题 布隆过滤器例子理解应用 例题 前言 位图与布隆过滤器是用来在海量数据中判断一个数据在不在的问题的数据结构&#xff0c;这种数据结构在存储空间上大大的优于红黑树、哈希等数据结构 位图 我们为了处理一个数据在海量数据中…

Linux CentOS8安装gitlab_ce步骤

1 下载安装包 wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/8/gitlab-ce-15.0.2-ce.0.el8.x86_64.rpm/download.rpm2 安装gitlab yum install policycoreutils-python-utilsrpm -Uvh gitlab-ce-15.0.2-ce.0.el8.x86_64.rpm3 更新配…

Gpt-4多模态功能强势上线,景联文科技多模态数据采集标注服务等您来体验!

就在上个月&#xff0c;OpenAI 宣布对ChatGPT 进行重大更新&#xff0c;该模型不仅能够通过文字输入进行识别和分析&#xff0c;还能够通过语音、图像甚至视频等多种模态的输入来获取、识别、分析和输出信息。这一重要技术突破&#xff0c;将促进多模态自然语言处理的发展&…

ESP32-WROOM-32无法进入下载模式进行程序上传的问题

结论 先说结论&#xff0c;ESP32-WROOM-32无法进入下载模式通过串口进行程序上传&#xff0c;可能是GPIO2引脚没有通过下拉电阻拉低&#xff0c;导致无法进入正确的启动模式。 启动模式 ESP32启动时会打印rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) 复位源rs…

mysql面试题49:MySQL中不同text数据类型的最大长度

该文章专注于面试&#xff0c;面试只要回答关键点即可&#xff0c;不需要对框架有非常深入的回答&#xff0c;如果你想应付面试&#xff0c;是足够了&#xff0c;抓住关键点 面试官&#xff1a;MySQL中TEXT数据类型的最大长度 在MySQL中&#xff0c;TEXT数据类型用于存储较大…

idea怎么设置作者信息(详细)

目录 一&#xff1a;在Java类的开头自动注释作者名字和日期等信息 二&#xff1a;给Java的方法注释作者名字和日期等信息 1. 不可修改的模板&#xff1a;Postfix Completion 2. 可修改的模板&#xff1a;Live Templates tips&#xff1a;首先给大家推荐两款好用的免费软件&…

【Linux】多进程编程

目录 1. 进程基础知识 2. 查看进程 3. 杀死进程 4. 获取进程标识符 5. 进程创建 6. 进程终止 7. 进程等待 8. 进程程序替换 9. 进程间通信之管道 9.1 匿名管道 9.2 命名管道&#xff08;FIFO&#xff09; 10. 进程间通信之共享内存 11. 进程间通信之信号 11.1 Li…

Linux传统跨进程通信原理

文章目录 前言一、进程隔离二、进程空间划分&#xff1a;用户空间(User Space)/内核空间(Kernel Space)三、系统调用&#xff1a;用户态与内核态四、Linux下传统IPC跨进程通信原理1、发送进程通过系统调用&#xff0c;将需要发送的数据拷贝到Linux进程的内核空间中的缓存区(数据…

百度智能云千帆大模型平台 2.0 产品技术解析

本文整理自 2023 年 9 月 5 日百度云智大会 - 智能计算&大模型技术分论坛&#xff0c;百度智能云 AI &大数据平台总经理忻舟的主题演讲《百度智能云千帆大模型平台 2.0 产品技术解析》。 这是关于技术主题的论坛&#xff0c;我首先问大家三个开发者的小问题。 第一个问…

tez作业运行慢

文章目录 问题现象&#xff1a;排查思路查看task运行概况查看map和reduce container的日志初步结论 继续排查container数量差异大分片计算异常 结论 问题现象&#xff1a; 每天调度的一个任务在某天突然运行时长多了好几倍&#xff0c;平时30m左右&#xff0c;那天运行了4个小…

Ubuntu 22.04‘Temporary failure resolving‘ 解决方案

终极解决方案 首先安装resolvconf sudo apt-get install resolvconf 使用 cd /etc/resolvconf/resolv.conf.d/ 进入文件夹&#xff0c;使用 ls 查看目录&#xff0c;会显示 base head tail 使用 sudo vim base 编辑base文件&#xff0c; 进入时为空&#xff0c;点击 i 添加 …

【架构艺术】(零) 环境搭建

写在前面 今天尝试了如systemC,Chisel,MyHDL等方式来进行功能仿真&#xff0c;并生成波形到Wavedrom格式&#xff0c;后来发现对于学习这些简单架构&#xff0c;还是脑子里面根据规则进行仿真或者是编写verilog代码进行仿真即可。 所以我们的环境依赖只有&#xff1a;安装waved…

【PostgreSQL启动,停止命令(重启)】

找到 /usr/lib/systemd/system文件夹路径看是否包含 postgresql服务 关闭服务&#xff1a; systemctl stop postgresql-12.service启动服务 systemctl start postgresql-12.service重启服务 systemctl restart postgresql-12查看状态 systemctl status postgresql-12.servi…

区分Cookie,Session,Token

Cookie 由于HTTP 协议是一个无状态协议&#xff0c;客户端向服务器发请求&#xff0c;服务器返回响应。并且你每次都要输入账号和密码进行登录&#xff0c;对于用户来说非常的麻烦&#xff01;这种背景下&#xff0c;就产生了 Cookie cookie 存储在客户端&#xff1a; cookie…

Essential Steps in Natural Language Processing (NLP)

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

C语言 | 浮点数在内存中存储方式

浮点数其实在内存中也是以2进制的形式存储的&#xff0c;但是它不是以原码、反码、补码的形式存储的。 常见的浮点数&#xff1a; 3.14159 1E10【科学计数法1.0*10^10】 eg&#xff1a;1.2312.3*10^-10.123*10^1 浮点数家族包括&#xff1a;float、double、long double类型…