.NET开源跨平台桌面和移动应用的统一框架 - Eto.Forms

前言

今天大姚给大家分享一个.NET开源、跨平台桌面和移动应用的统一框架:Eto.Forms。

项目介绍

Eto.Forms是一个.NET开源、跨平台的桌面和移动应用的统一框架,该框架允许开发者使用单一的UI代码库构建在多个平台上运行的应用程序,并利用各自平台的原生工具包,从而使应用程序在所有平台上看起来和工作都像原生应用一样。

支持的平台

支持Windows Forms、WPF、MonoMac和GTK#等桌面平台,以及正在开发中的iOS(使用Xamarin.iOS)和Android(使用Xamarin.Android)移动平台支持(尽管目前尚不完整)。

在WinForms中快速使用

创建WinForms应用

创建一个名为:EtoFormsExercise的WinForms应用:

 

7775c687a4b10bfcb0da2642758a819c.png

 

aca16f94d49d8d39a791c6df4fab4344.png

 

0168756dbccbeb2ad2eaefc809090553.png

安装 Eto.WinForms Nuget包

在Nuget包管理器中搜索:Eto.WinForms进行安装:

 

9251596d32d158898f9e19441abf6d53.png

初始化 Eto.Forms 应用程序

Program.cs中编写代码来初始化 Eto.Forms 应用程序,并设置主窗体。这通常涉及到创建一个继承自 Eto.Forms.Form 的类,并在其中定义界面元素。

using Eto.Forms;
using Application = Eto.Forms.Application;
using Button = Eto.Forms.Button;
using Form = Eto.Forms.Form;
using Label = Eto.Forms.Label;

namespace EtoFormsExercise
{
    class Program
    {
        [STAThread]
        static void Main()
        {
            new Application(Eto.Platforms.WinForms).Run(new MainForm());
        }
    }

    public class MainForm : Form
    {
        private TextArea textArea;

        public MainForm()
        {
            Title = "My EtoForms Exercise";
            ClientSize = new Eto.Drawing.Size(800, 600);

            // 创建按钮  
            var button = new Button { Text = "Click Me" };
            button.Click += Button_Click;

            // 创建文本区域  
            textArea = new TextArea
            {
                Size = new Eto.Drawing.Size(600, 300)
            };

            // 创建布局  
            var layout = new StackLayout
            {
                Padding = 10,
                Spacing = 10,
                Items =
                {
                    new Label { Text = "Hello, My EtoForms Exercise!" },
                    button,
                    textArea
                }
            };

            Content = layout;
        }

        private void Button_Click(object sender, EventArgs e)
        {
            // 当按钮被点击时,更新文本区域的内容
            textArea.Text += "DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目框架推荐、求职和招聘资讯、以及解决问题的平台。";
        }
    }
}

演示效果:

 

28d1ccd4907e48479f8726ff077c1674.png

框架源代码

 

17192dd3020974609e1de1b0af311fb1.png

对应平台运行截图

Windows

 

851f97ce95114f85e11fbeca525f27e5.png

Mac

 

484f7674b3619375bb05ac796dddb63f.png

Linux

 

1f81fe9f8d2b3924fcf6f7804cfa27f2.png

项目源码地址

更多项目实用功能和特性欢迎前往项目开源地址查看👀,别忘了给项目一个Star支持💖。

  • 开源地址:https://github.com/picoe/Eto

  • 本文示例源码:https://github.com/YSGStudyHards/DotNetExercises/tree/master/EtoFormsExercise

优秀项目和框架精选

该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没🤞)。

  • GitHub开源地址:https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md

  • Gitee开源地址:https://gitee.com/ysgdaydayup/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式C语言自我修养:编译链接

源文件生成可执行文件的过程? 源文件经过预处理、编译、汇编、链接生成一个可执行的目标文件。 编译器驱动程序,包括预处理器、编译器、汇编器和链接器。Linux用户可以调用GCC驱动程序来完成整个编译流程。 使用GCC驱动程序将示例程序从ASCII码源文件转换…

数字图像处理:边缘检测

数字图像处理:边缘检测 笔记来源: 1.Gradient and Laplacian Filter, Difference of Gaussians (DOG) 1.1 图像一阶梯度 水平方向的一阶导数 一阶导数滤波器在实际应用中难实现的原因 图像梯度中,一阶梯度中找局部极大值就是边缘所在处&a…

SOCKS5代理和HTTP代理哪个快?深度解析两者的速度差异

在现代互联网环境中,使用代理IP已经成为了许多人日常生活和工作的必备工具。无论是为了保护隐私,还是为了访问某些特定资源,代理IP都扮演着重要的角色。今天,我们就来聊聊SOCKS5代理和HTTP代理,看看这两者到底哪个更快…

netty编程之实现websocket客户端并发送二进制消息

写在前面 源码。 本文看下netty如何实现websocket客户端并发送二进制消息。 ws的server端参考这篇文章。 1:正文 抽象类AbstractWebsocketClient定义了发送二进制数据的方法: public abstract class AbstractWebsocketClient implements Closeable {…

向量数据库|第1期|从零开始学习

向量数据库|第1期|从零开始学习 1、向量数据库中的基本概念 1.1 什么是余弦 余弦函数是一种三角函数,在直角三角形中,某个锐角的余弦为:临边与斜边的比值,如下图cosAb/c。引申到任意三角形中,即余弦定理:…

大数据-151 Apache Druid 集群模式 配置启动【上篇】 超详细!

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

数据结构--二叉树的顺序实现(堆实现)

引言 在计算机科学中,二叉树是一种重要的数据结构,广泛应用于各种算法和程序设计中。本文将探讨二叉树的顺序实现,特别是堆的实现方式。 一、树 1.1树的概念与结构 树是⼀种⾮线性的数据结构,它是由 n(n>0) 个有限结点组成…

【C++打怪之路Lv6】-- 内存管理

🌈 个人主页:白子寰 🔥 分类专栏:C打怪之路,python从入门到精通,数据结构,C语言,C语言题集👈 希望得到您的订阅和支持~ 💡 坚持创作博文(平均质量分82)&#…

15分钟学 Python 第36天 :Python 爬虫入门(二)

Python 爬虫入门:环境准备 在进行Python爬虫的学习和实践之前,首先需要准备好合适的开发环境。本节将详细介绍Python环境的安装、必要库的配置、以及常用工具的使用,为后续的爬虫编写奠定坚实的基础。 1. 环境准备概述 1.1 为什么环境准备…

基于Springboot投稿和稿件处理系统设计与实现

博主介绍:专注于Java vue .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的…

数据集-目标检测系列- 货船 检测数据集 freighter>> DataBall

数据集-目标检测系列- 货船 检测数据集 freighter>> DataBall 数据集-目标检测系列- 货船 检测数据集 freighter>> DataBall 数据量:3k 想要进一步了解,请联系。 DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种…

订阅ROS2中相机的相关话题并保存RGB、深度和点云图

系统:Ubuntu22.04 ROS2版本:ROS2 humble 1.订阅ROS2中相机的相关话题并保存RGB图、深度图和点云图 ros2 topic list/stellar_1/rgb/image_raw /camera/depth/image_raw /stellar_1/points2CMakeLists.txt cmake_minimum_required(VERSION 3.15) projec…

建筑资质的未来发展趋势

🏗️建筑资质是建筑企业进入市场的通行证,它不仅关系到企业的竞争力,也影响着整个建筑行业的健康发展。随着政策的调整和技术的进步,建筑资质管理正面临着新的变革。 1. 资质管理的数字化转型:🌐 随着信息技…

Gaussian-splatting 项目环境配置笔记(Win11)

如果你是配置别的项目的过程中用到了3D GS相关的内容,然后这部分内容环境一直配不好,也可以跟随这个博客配一下环境,配完后起码3D GS部分就搞定了。 文章目录 概述项目链接:VS2019直接下载链接CUDA不同版本下载链接安装Condasetup…

63.5 注意力提示_by《李沐:动手学深度学习v2》pytorch版

系列文章目录 文章目录 系列文章目录注意力提示生物学中的注意力提示查询、键和值注意力的可视化使用 show_heatmaps 显示注意力权重代码示例 代码解析结果 小结练习 注意力提示 🏷sec_attention-cues 感谢读者对本书的关注,因为读者的注意力是一种稀缺…

【MATLAB2024b】安装离线帮助文档(windows)

文章目录 一、在 MATLAB 设置中安装二、从math works 网站下载ISO:给无法联网的电脑安装三、重要说明 版本:matlab 2024b(或者大于等于2023a) 所需空间:10~15 GB 平台:Windows 需要注册math works账号。 一…

深度学习-19-深入理解并训练自己的Tokenizer分词器

文章目录 1 tokenization是什么2 Tokenization方法简介2.1 单词级的Tokenization2.2 子词Tokenization技术2.3 举例说明2.3.1 字符级别2.3.2 词语级别2.3.3 子词级别3 训练自己的Tokenizer3.1 下载数据集3.2 huggingface的Tokenizer实现3.3 my-tokenizer.json字段说明3.4 验证一…

鸿蒙harmonyos next flutter混合开发之开发package

​​​​​​ 创建 package flutter create --templatepackage mypackage package代码如下: 创建hello_world.dart ///HelloWorld返回hello world 拼接param class HelloWorld {String helloWorld(String param) > "hello world ${param}"…

【视频目标分割-2024CVPR】Putting the Object Back into Video Object Segmentation

Cutie 系列文章目录1 摘要2 引言2.1背景和难点2.2 解决方案2.3 成果 3 相关方法3.1 基于记忆的VOS3.2对象级推理3.3 自动视频分割 4 工作方法4.1 overview4.2 对象变换器4.2.1 overview4.2.2 Foreground-Background Masked Attention4.2.3 Positional Embeddings 4.3 Object Me…

CSS实现服务卡片

CSS实现服务卡片 效果展示 CSS 知识点 回顾整体CSS知识点灵活运用CSS知识点 页面整体布局 <div class"container"><div class"card"><div class"box"><div class"icon"><ion-icon name"color-pal…