您现在的位置是:网站首页> .NET Core

Avalonia .NET 的跨平台 UI 框架学习资料收集

摘要

Avalonia .NET 的跨平台 UI 框架学习资料收集

点击进入Avalonia主页

最有效办法是点击查看微软MAUI学习资料


dotnet命令行发布应用程序

***Avalonia.NET编译Android配置签名***

MAUI配置发布Android IOS等个平台独特的文件配置

Avalonia生成的程序位置

dotnet publish 发布win-x64程序,用这个命令行设置图标,给个例子

WPF应用转Avalonia

Avalonia点击查看库文档

vs2022的Avalonia扩展安装

Avalonia入门及学习

Avalonia 中,你可以通过几种方式向新窗口传递参数并获取返回值

基于Material Design风格开源的Avalonia UI控件库

Avalonia .NET实现NFC的读写的详细例子

Avalonia UI  报错



Avalonia .NET编译Android配置签名

1.png

对Android项目右键配置项目属性点Android项,划到包签名



Avalonia生成的程序位置

1.png




Avalonia 中,你可以通过几种方式向新窗口传递参数并获取返回值

1.首先,创建一个新的窗口类,比如 SecondWindow.axaml 和 SecondWindow.axaml.cs。


2.在 SecondWindow.axaml.cs 中,添加构造函数和属性来接收参数,并添加一个方法来返回结果:

public partial class SecondWindow : Window

{

    public string InputParameter { get; set; }

    public string Result { get; private set; }


    public SecondWindow()

    {

        InitializeComponent();

    }


    public SecondWindow(string inputParameter) : this()

    {

        InputParameter = inputParameter;

    }


    private void OnOKButtonClick(object sender, RoutedEventArgs e)

    {

        Result = "处理完成";

        Close();

    }

}


3.在主窗口 MainWindow.axaml.cs 中,添加一个方法来打开新窗口并等待结果:

private async void OpenSecondWindowButton_Click(object sender, RoutedEventArgs e)

{

    var secondWindow = new SecondWindow("这是传入的参数");

    var result = await ShowDialogAsync(secondWindow);


    if (result == true)

    {

        // 获取返回值

        string returnValue = secondWindow.Result;

        // 处理返回值

        await MessageBoxManager.GetMessageBoxStandardWindow("结果", $"返回值: {returnValue}").ShowAsync();

    }

}


private async Task<bool?> ShowDialogAsync(Window window)

{

    var tcs = new TaskCompletionSource<bool?>();

    window.Closed += (s, e) => tcs.TrySetResult(window.DialogResult);

    await window.ShowDialog(this);

    return await tcs.Task;

}


4.在 SecondWindow.axaml 中,添加一个按钮来关闭窗口并设置结果:

<Window xmlns="https://github.com/avaloniaui"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        x:Class="YourNamespace.SecondWindow"

        Title="Second Window">

    <StackPanel>

        <TextBlock Text="{Binding InputParameter}" />

        <Button Content="确定" Click="OnOKButtonClick" />

    </StackPanel>

</Window>


5.在主窗口 MainWindow.axaml 中,添加一个按钮来打开新窗口:

<Window xmlns="https://github.com/avaloniaui"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        x:Class="YourNamespace.MainWindow"

        Title="Main Window">

    <Button Content="打开新窗口" Click="OpenSecondWindowButton_Click" />

</Window>


这个例子展示了如何:

1.创建一个新窗口并传递参数(通过构造函数)。

2.在新窗口中处理参数并设置返回值。

3.在主窗口中等待新窗口关闭并获取返回值。

4.使用 TaskCompletionSource 来异步等待窗口关闭。

通过这种方式,你可以方便地在 Avalonia 应用程序中实现窗口间的参数传递和返回值获取。




基于Material Design风格开源的Avalonia UI控件库

点击查看原文



Avalonia .NET实现NFC的读写的详细例子

你可以在Avalonia应用中集成NFC功能,通过使用其他.NET库或原生API来实现。以下是一个概念性的例子,说明如何在Avalonia应用中集成NFC功能:

首先,你需要一个NFC库。在.NET生态系统中,没有一个广泛使用的跨平台NFC库。你可能需要根据目标平台选择不同的实现方式。

对于Windows,你可以使用Windows.Devices.Nfc命名空间。

对于Android,你可以使用Xamarin.Android的NFC API。

对于iOS,你可以使用CoreNFC框架。

下面是一个概念性的例子,展示了如何在Avalonia应用中集成NFC读取功能(以Windows平台为例):

using Avalonia;

using Avalonia.Controls;

using Avalonia.Markup.Xaml;

using Windows.Devices.Nfc;

using Windows.Devices.Enumeration;


public class MainWindow : Window

{

    private NfcReader _nfcReader;


    public MainWindow()

    {

        InitializeComponent();

        InitializeNfcReader();

    }


    private async void InitializeNfcReader()

    {

        var selector = NfcReader.GetDeviceSelector();

        var devices = await DeviceInformation.FindAllAsync(selector);

        if (devices.Count > 0)

        {

            _nfcReader = await NfcReader.FromIdAsync(devices[0].Id);

            _nfcReader.TagRead += OnTagRead;

        }

    }


    private void OnTagRead(NfcReader sender, NfcTagEventArgs args)

    {

        var tag = args.Tag;

        // 处理NFC标签数据

        Dispatcher.UIThread.InvokeAsync(() =>

        {

            // 更新UI

        });

    }


    // XAML初始化代码

    private void InitializeComponent()

    {

        AvaloniaXamlLoader.Load(this);

    }

}

这个例子展示了如何初始化NFC读取器并处理标签读取事件。你需要根据实际需求修改UI更新逻辑。


对于写入NFC标签,过程类似,但你需要使用NfcWriter类。例如:

private async Task WriteToTag(NdefMessage message)

{

    var writer = new NfcWriter();

    await writer.WriteNdefMessageAsync(message);

}

请注意,这只是一个概念性的例子。实际实现可能会更复杂,需要考虑错误处理、不同平台的兼容性等因素。此外,由于NFC操作涉及硬件访问,你可能需要请求适当的权限。


在跨平台场景中,你可能需要为每个平台创建单独的NFC实现,然后通过依赖注入或其他方式在Avalonia应用中使用



Avalonia UI  报错

报错:System.InvalidOperationException:“Unable to configure HTTPS endpoint. No server certificate was specified, and the default developer certificate could not be found or is out of date.

解决办法:

原因

未生成开发证书:

.NET 开发环境下默认需要 HTTPS 证书,若未生成或证书缺失,启动时会报此错误。


证书过期:

.NET 开发证书有效期为 1 年,过期后需重新生成。


项目未正确配置 HTTPS:

若项目中启用了 HTTPS 但未指定证书路径,可能导致此问题。


解决方案

1. 生成并信任开发证书

Windows/macOS/Linux

在终端执行以下命令:

# 检查证书状态

dotnet dev-certs https --check


# 清理旧证书(如有必要)

dotnet dev-certs https --clean


# 生成新证书

dotnet dev-certs https --trust



dotnet publish 发布win-x64程序,用这个命令行设置图标,给个例子

使用 dotnet publish 命令发布 Win-x64 程序时,希望通过命令行设置可执行文件的图标。虽然 dotnet publish 本身不直接支持通过命令行参数来设置图标,但您可以结合修改项目文件(.csproj)的方式来实现这一点。

下面是详细的步骤和示例:

步骤

准备图标文件: 确保你有一个 ICO 格式的图标文件(例如 appicon.ico),并将它放在你的项目目录中或其他合适的位置。

修改项目文件 (.csproj): 编辑你的 .csproj 文件,添加必要的元素来指定图标。

使用 dotnet publish 命令发布应用程序: 运行 dotnet publish 命令来发布你的应用程序。

示例

假设你有一个名为 MyApp.csproj 的控制台应用程序,并且你想将 appicon.ico 设置为其可执行文件的图标。

修改 .csproj 文件

首先,打开你的 .csproj 文件并在适当位置添加以下内容:

<Project Sdk="Microsoft.NET.Sdk">


    <PropertyGroup>

        <OutputType>Exe</OutputType>

        <TargetFramework>net7.0-windows</TargetFramework>

        

        <!-- 添加这些行来指定图标 -->

        <ApplicationIcon>path/to/appicon.ico</ApplicationIcon>

        <WinExeIconFromBuildAsResource>false</WinExeIconFromBuildAsResource>

    </PropertyGroup>


    <!-- ...其他配置... -->


</Project>

在这个示例中:

<ApplicationIcon> 指定了图标的相对路径。

<WinExeIconFromBuildAsResource> 设置为 false 表明不要将图标作为资源嵌入到可执行文件中。

如果 appicon.ico 放在项目的根目录下,可以直接写成:

<ApplicationIcon>appicon.ico</ApplicationIcon>

如果图标不在项目根目录下,请提供完整路径或相对于 .csproj 文件的路径。


使用 dotnet publish 命令发布应用程序

接下来,使用 dotnet publish 命令来发布你的应用程序:

# 使用 release 构建模式并且针对 windows x64 平台发布

dotnet publish -c Release -r win-x64 --self-contained false /p:PublishSingleFile=true /p:PublishTrimmed=true


这条命令做了以下几件事:

-c Release: 使用 Release 构建模式。

-r win-x64: 针对 Windows 64-bit 平台发布。

--self-contained false: 不包含 .NET Runtime,减少最终生成文件大小。

/p:PublishSingleFile=true: 将所有依赖项合并到一个单一的可执行文件中。

/p:PublishTrimmed=true: 启用 IL Trimming,去除不需要的部分以减小文件大小。


完整示例

假设你的项目结构如下:

MyApp/

├── MyApp.csproj

└── appicon.ico

MyApp.csproj 内容

<Project Sdk="Microsoft.NET.Sdk">


    <PropertyGroup>

        <OutputType>Exe</OutputType>

        <TargetFramework>net7.0-windows</TargetFramework>

        <ApplicationIcon>appicon.ico</ApplicationIcon>

        <WinExeIconFromBuildAsResource>false</WinExeIconFromBuildAsResource>

    </PropertyGroup>


</Project>

发布命令

dotnet publish -c Release -r win-x64 --self-contained false /p:PublishSingleFile=true /p:PublishTrimmed=true









Top