CPF C#跨平台UI框架开源了

介绍

C#跨平台UI框架

提供NETStandard2.0和net4的库,通过Netcore可以跨平台,支持Windows、Mac、Linux,Net4的可以支持XP。

各个平台运行效果一致,不依赖系统控件。 支持窗体,控件任意透明,支持异形窗体,支持SVG图标显示。

支持动画,数据绑定,Mvvm模式,CSS等,简化依赖属性,数据绑定的写法,提供数据上下文和命令上下文来绑定。

直接用CSS和C#代码描述, 提供设计器生成C#代码和开发者工具查看和调试元素。

和WPF一样的理念,任何控件都可以任意设计模板来实现各种效果 除了使用平台相关API之外,基本可以实现一次编写,到处运行。

全面支持国产化,支持国产Linux + 龙芯、飞腾、兆芯、海光等CPU平台

软件架构说明

CPF为主要框架,CPF.Skia为用skia做图形适配,CPF.Windows、CPF.Linux、CPF.Mac、CPF.Android为各个平台的适配器。

所有控件采用自绘,可以保证各个平台渲染一致性。可以开启skia的硬件加速。Windows端还可以选择GDI+作为图形渲染

C#描述UI

复制代码
public class Window1 : Window
{
    protected override void InitializeComponent()
    {
        LoadStyleFile("res://测试/Stylesheet1.css");
        Title = "标题";
        Width = 500;
        Height = 400;
        Background = null;
        Children.Add(new WindowFrame(this, new Panel
        {
            Width = "100%",
            Height = "100%",
            Children =
            {
                new StackPanel{
                    Size = SizeField.Fill,
                    Children = {
                        new Label{
                            Text = "标签",
                            Bindings = {
                                {nameof(Label.Text),nameof(MainModel.Test) },
                                //{ nameof(Label.Text), nameof(MainModel.Test), null, BindingMode.OneWay, (string a)=>a+"转换器" }
                            },
                        },
                        new Button{
                            Content="按钮",
                            Bindings = {
                                {nameof(Label.Text),nameof(MainModel.Test) }
                            },
                        }
                    },
                },
            }
        }));
    }
}

CSS描述样式

需要注意的是这里只是用到CSS的格式,并不是兼容网页的CSS

复制代码
Button {
    BorderFill: #DCDFE6;
    IsAntiAlias: True;
    CornerRadius: 4,4,4,4;
    Background: #FFFFFF;
}

    Button[IsMouseOver=true] {
        BorderFill: rgb(198,226,255);
        Background: rgb(236,245,255);
        Foreground: rgb(64,158,255);
    }

    Button[IsPressed=true] {
        BorderFill: rgb(58,142,230);
    }

使用说明

开源地址:https://gitee.com/csharpui/CPF

直接克隆/下载就可以编译,直接启动ConsoleApp1看运行效果

CPF使用文档 http://cpf.cskin.net/Course/#/

扩展库

https://gitee.com/csharpui/cpf.cef 使用CPF对cef的封装,跨平台浏览器控件

https://gitee.com/csharpui/cpf.vlc 使用CPF对vlc的封装,跨平台视频播放控件

其他说明

之前一直在纠结要不要开源,一个人太难搞了,欢迎大家一起壮大开源社区

肯定有很多人会把CPF和Avalonia、Maui进行对比,自己根据喜好和需求选择吧,CPF是没有Xaml,不排除将来可能会增加Xaml的功能。CPF会尽量适配国内系统和环境。

效果截图

相关推荐
小黄花呀小黄花2 小时前
从零开始构建工业自动化软件框架:基础框架搭建(三)容器、配置、日志功能测试
c#
小黄花呀小黄花2 小时前
从零开始构建工业自动化软件框架:基础框架搭建(一)容器与日志功能实现
c#
马达加斯加D2 小时前
C# --- 本地缓存失效形成缓存击穿触发限流
开发语言·缓存·c#
q__y__L5 小时前
C# WaitHandle类的几个有用的函数
java·开发语言·c#
步、步、为营5 小时前
.NET8 正式发布, C#12 新变化
ui·c#·.net
伽蓝_游戏6 小时前
Unity UI的未来之路:从UGUI到UI Toolkit的架构演进与特性剖析(7)
游戏·ui·unity·架构·c#·游戏引擎·.net
q__y__L10 小时前
C#线程同步(三)线程安全
安全·性能优化·c#
程序设计实验室12 小时前
纯 C#实现+AOT 打造的多功能图片处理工具 ImageGlider
c#·aot
BuHuaX19 小时前
Unity_数据持久化_IXmlSerializable接口
xml·unity·c#·游戏引擎·游戏策划
格林威20 小时前
Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现路口车辆速度的追踪识别(C#代码UI界面版)
人工智能·深度学习·数码相机·yolo·计算机视觉·c#·视觉检测