Avalonia学习(二十三)-大屏

弄一个大屏显示的界面例子,但是代码有点多,还有用户控件。

目前还有一点问题在解决,先看一下界面效果。

圆形控件

前端代码

XML 复制代码
<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"
             x:Class="ProAvalonia.Controls.CircularProgressBar">
  <Grid Name="layout" >
    <Ellipse StrokeThickness="8"  Name="backEllipse"
                 />
    <Path Data="M75.001 5 A70 70 0 1 1 75 5" StrokeThickness="6" Stroke="#CC2BB6FE"
          Name="path"/>

    <Viewbox Margin="14">
      <TextBlock 
                 VerticalAlignment="Center" HorizontalAlignment="Center"/>
    </Viewbox>

    <Grid VerticalAlignment="Top" Margin="0,-3,0,0">
      <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
      </Grid.ColumnDefinitions>
      <Canvas>
        <TextBlock 
                   HorizontalAlignment="Right" FontSize="9" Foreground="#55FFFFFF"
                   Canvas.Right="8"/>
      </Canvas>
    </Grid>
  </Grid>
</UserControl>

后台代码

cs 复制代码
using Avalonia.Controls;
using System.ComponentModel;
using System;
using Avalonia;
using System.Drawing;
using Avalonia.Media;
using Brush = System.Drawing.Brush;
using Color = System.Drawing.Color;

namespace ProAvalonia.Controls
{
    public partial class CircularProgressBar : UserControl
    {
        public static readonly StyledProperty<double> ValueProperty =
            AvaloniaProperty.Register<CircularProgressBar,double>(nameof(Value),0);
        public double Value
        {
            get { return (double)GetValue(ValueProperty); }
            set { SetValue(ValueProperty, value); }
        
        }
        //private static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        //{
        //    (d as CircularProgressBar).UpdateValue();
        //}

        public static readonly StyledProperty<SolidColorBrush> BackColorProperty =
           AvaloniaProperty.Register<CircularProgressBar, SolidColorBrush>(nameof(BackColor));
        public SolidColorBrush BackColor
        {
            get { return (SolidColorBrush)GetValue(BackColorProperty); }
            set { SetValue(ValueProperty, value); }
        }

        public string Title
        {
            get { return (string)GetValue(TitleProperty); }
            set { SetValue(TitleProperty, value); }
        }
        public static readonly StyledProperty<string> TitleProperty =
          AvaloniaProperty.Register<CircularProgressBar, string>(nameof(Title));

        public CircularProgressBar()
        {
            InitializeComponent();
            this.SizeChanged += CircularProgressBar_SizeChanged;
        }

      
        private void CircularProgressBar_SizeChanged(object sender, SizeChangedEventArgs e)
        {
            UpdateValue();
        }

        private void UpdateValue()
        {
            this.layout.Width = Math.Min(this.Width, this.Height);
            double radius = this.layout.Width / 2;
            if (radius == 0 || Value == 0) return;

            double newX = 0.0, newY = 0.0;
            newX = radius + (radius - 3) * Math.Cos((Value % 100 * 100 * 3.6 - 90) * Math.PI / 180);
            newY = radius + (radius - 3) * Math.Sin((Value % 100 * 100 * 3.6 - 90) * Math.PI / 180);

            string pathStr = $"M{radius + 0.01} 3 " +
                $"A{radius - 3} {radius - 3} 0 {(this.Value < 0.5 ? 0 : 1)} 1 {newX} {newY}";

            var converter = TypeDescriptor.GetConverter(typeof(Geometry));
            this.path.Data = (Geometry)converter.ConvertFrom(pathStr);
        }
    }
}

另外还有GroupBox库和主界面,很多代码就不贴代码了,完善的效果展示一下。

下一篇给大家展示一个物联的演示界面,请期待。

相关推荐
IT古董17 分钟前
【MES学习笔记系列】MES 术语表
笔记·学习
云深处@11 小时前
【数据库】MySQL 入门
数据库·学习·mysql
HyperAI超神经12 小时前
【vLLM 学习】Disaggregated Prefill
人工智能·深度学习·学习·vllm
天吾cc12 小时前
RTT-IO设备模型
单片机·嵌入式硬件·学习
美味蛋炒饭.12 小时前
Git 版本控制(下)
开发语言·git·学习·总结·后端开发
呼噜想睡觉13 小时前
Bootstrap 组件之响应式导航条实现
学习
菜鸟‍13 小时前
【论文学习】Medical Image Analysis 2024 || 医学图像分割中失败检测方法的比较基准研究:揭示置信度聚合的作用
人工智能·学习
爱音乐的marlon14 小时前
FastAPI 学习笔记03|core 核心层:config 是总控制台,database 是整个工程的地基
笔记·学习·fastapi
math_hongfan15 小时前
鸿蒙离线数据缓存高级架构:弱网预加载/离线数据优先级/同步冲突解决/上线后数据合并策略
学习·缓存·华为·架构·harmonyos·鸿蒙
划水的code搬运工小李16 小时前
Simulink学习-自定义Storage Class配置
学习