首页 > 编程语言 >CPF C#跨平台UI框架开源了

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

时间:2023-11-24 15:37:06浏览次数:34  
标签:控件 nameof C# CPF 跨平台 new

介绍

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会尽量适配国内系统和环境。

 

 效果截图

 

 

 

 

标签:控件,nameof,C#,CPF,跨平台,new
From: https://www.cnblogs.com/dskin/p/17849896.html

相关文章

  • Docker 常用命令 -- 容器(Container)篇
    1.查看容器dockerps列表正在运行的容器dockerps-a列表所有容器dockerps-q只列表容器的ID-aq是所有容器的ID2.运行容器dockerrun-it-d--name要取的别名镜像名:Tag/bin/bash-i以交互模式运行容器通常与-t一起用-t为容器重新分配一个伪终端......
  • Crypto_CTFHub_WriteUp | 栅栏解救
    题目fsf5lrdwacloggwqi11l分析如题,对字符串按栅栏密码排列,有以下两种可能:f-l-a-g-is-r-c-g-1f-d-l-w-15-w-o-q-lf---l---a---g---i-s-5-r-w-c-o-g-q-1-l--f---d---l---w---1按flag格式调整后为:flag{rcg1fdlw15woql}flag{5rwcogq1lfdlw1}尝试提交后确认flag......
  • std::thread方法join与detach
    1、std::joinstd::join是std::thread类的成员函数之一,用于等待线程的执行完成。#include<iostream>#include<utility>#include<thread>#include<chrono>#include<atomic>voidprocess(std::stringstr_info){for(inti=0;i<500;++i)......
  • PYTHON实现EXCEL数据导入MYSQL
    #coding=utf8importpymysqlimportosimportpandasaspdhost='127.0.0.1'port=3308user='root'password='*****'db='impairment_testing'conn=pymysql.connect(host=host,port=port,user=user,password=password,db=db......
  • 详解CCE服务:一站式告警配置和云原生日志视图
    本文分享自华为云社区《新一代云原生可观测平台之CCE服务日志和告警篇》,作者:云容器大未来。告警和日志是运维人员快速定位问题、恢复异常的主要手段。运维人员日常的工作模式往往是先接收告警信息,再根据告警信息初步判断异常的范围和影响,通过相关组件的日志定位出故障原因,进行系......
  • ASP.NET MVC5 Bundling and Minification
    代码varmyScriptBundle=newScriptBundle("~/bundles/script").Include("~/Scripts/myscript.js");bundles.Add(myScriptBundle);varmyStyleBundle=newStyleBundle("~/Content/css").Include("~/Content/Login/mycss.css")......
  • General error: 1205 Lock wait timeout exceeded; try restarting transaction【事务
    转载:https://blog.51cto.com/u_12390904/6254246       ......
  • 03_Exception in thread “main“ java.lang.AssertionError
    问题maven构建报错***[INFO]---maven-compiler-plugin:3.8.1:compile(default-compile)@engine_auth---[INFO]Changesdetected-recompilingthemodule![INFO]Compiling38sourcefilestoC:\Users\...\target\classes[INFO]-----------------------------......
  • docker
         ......
  • Teamcenter SOA开发报错:您没有最新的时间表。请刷新时间表以获取最新副本。
    1、时间表创建任务的时候报了这个错。按字面意思,只刷新时间表是不行的。 解决方法:你创建的任务,肯定会放在一个父任务的。这是要将父任务,进行刷新。如果刷新不行的,可以尝试释放锁的刷新。如果还是不行,把时间表对象也放进来刷新。......