首页 > 编程语言 >在 Avalonia 程序中添加自定义字体,并优化字体显示效果

在 Avalonia 程序中添加自定义字体,并优化字体显示效果

时间:2024-10-22 20:10:33浏览次数:8  
标签:MiSans 自定义 AvaloniaApplication1 添加 字体 using Avalonia

这里以 MiSans 为例,因为尝试了下 阿里巴巴普惠体 失败了。。。其它字体还未尝试

1、添加字体需要将所需字体文件添加到项目中,并将其“生成操作”设置为“AvaloniaResource”,如图:

2、在 App.axaml 中添加字体引用

<Application xmlns="https://github.com/avaloniaui"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             x:Class="AvaloniaApplication1.App"
             RequestedThemeVariant="Default">
             <!-- "Default" ThemeVariant follows system theme variant. "Dark" or "Light" are other available options. -->

    <Application.Styles>
        <FluentTheme />
    </Application.Styles>
    <Application.Resources>
        <!-- 指定字体文件(#号后是字体名称,必须指定,否则不生效。貌似不支持字体的变体,如:MiSans Bold) -->
        <FontFamily x:Key="MiSans">avares://AvaloniaApplication1/fonts/MiSans-Normal.ttf#MiSans</FontFamily>
        <!-- 指定字体文件夹(#号后是字体名称,必须指定,否则不生效。) -->
        <!--<FontFamily x:Key="MiSans">avares://AvaloniaApplication1/fonts#MiSans</FontFamily>-->
    </Application.Resources>
</Application>

3、最后,在需要使用字体的地方,进行使用,此处以将窗口字体设置为 MiSans 为例:

<Window 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="660"
        x:Class="AvaloniaApplication1.MainWindow"
        FontFamily="{StaticResource MiSans}">

    <!--...... 其它代码......-->
    
</Windows>

4、还可以通过代码进行全局设置,修改 Program.cs 内代码:

using Avalonia;
using Avalonia.Media;
using System;

namespace AvaloniaApplication1
{
    internal class Program
    {
        // Initialization code. Don't use any Avalonia, third-party APIs or any
        // SynchronizationContext-reliant code before AppMain is called: things aren't initialized
        // yet and stuff might break.
        [STAThread]
        public static void Main(string[] args) => BuildAvaloniaApp()
            .StartWithClassicDesktopLifetime(args);

        // Avalonia configuration, don't remove; also used by visual designer.
        public static AppBuilder BuildAvaloniaApp()
            => AppBuilder.Configure<App>()
                .UsePlatformDetect()
                // 此处是添加了一个内置默认字体
                .WithInterFont()
                // 此处配置自定义字体
                .With(new FontManagerOptions
                {
                    // 设置为默认字体
                    DefaultFamilyName = "avares://AvaloniaApplication1/fonts/MiSans-Normal.ttf#MiSans",
                    FontFallbacks = new[]
                    {
                        // 且必须再设置一个回落字体,否则会被前面添加的内置默认字体覆盖
                        // 或者也可以不添加内置默认字体,此处即可不再设置
                        new FontFallback
                        {
                            FontFamily = new FontFamily("avares://AvaloniaApplication1/fonts/MiSans-Normal.ttf#MiSans")
                        }
                    }
                })
                .LogToTrace();
    }
}

5、配置完默认字体后,发现字体边缘锯齿非常明显,影响观感。

可以进行字体渲染的配置,但目前只找到在单个窗口或控件上进行配置的方法,不知道全局如何配置。

using Avalonia.Controls;
using Avalonia.Media;
using Avalonia.Media.Imaging;

namespace AvaloniaApplication1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            // 字体渲染模式:Alias - 锯齿、Antialias - 抗锯齿、SubpixelAntialias - 次像素抗锯齿
            RenderOptions.SetTextRenderingMode(this, TextRenderingMode.SubpixelAntialias);

            // 如果发现图片呈现不清晰,应该可以通过该配置优化渲染:位图插值模式
            RenderOptions.SetBitmapInterpolationMode(this, BitmapInterpolationMode.HighQuality);

            // 如果发现形状边缘有锯齿,应该可以通过该配置优化渲染:边缘渲染模式
            RenderOptions.SetEdgeMode(this, EdgeMode.Antialias);
        }
    }
}

结束。

 

参考链接:

https://github.com/AvaloniaUI/Avalonia/pull/9584

 https://github.com/AvaloniaUI/Avalonia/pull/15676

标签:MiSans,自定义,AvaloniaApplication1,添加,字体,using,Avalonia
From: https://www.cnblogs.com/xwgli/p/18493648

相关文章

  • docker入门(三)自定义部署docker镜像
    docker系列d​​​​​​​docker入门(一)安装及镜像命令_docker国内源-CSDN博客文章浏览阅读1.5k次,点赞44次,收藏12次。注意:是强依赖Linux环境,即便在windows上部署Docker其本质也都是先安装一个虚拟机,然后在虚拟出来的Linux上再安装并运行Docker。DockerCompose是一个用于定义......
  • .NET 隐藏/自定义windows系统光标
    本文介绍如何操作windows系统光标。正常我们设置/隐藏光标,只能改变当前窗体或者控件范围,无法全局操作windows光标。接到一个需求,想隐藏windows全局的鼠标光标显示,下面讲下如何操作 先了解下系统鼠标光标,在鼠标属性-自定义列表中可以看到一共有13种类型,对应13种工作状态:操作系......
  • easyExcel生成excel并导出自定义样式(三)指定列字体样式
    publicclassExcelRowColorHandlerimplementsCellWriteHandler{privatefinalIntegercolumnIndex;privatefinalSet<Integer>redRowIndex;privatefinalSet<Integer>yellowRowIndex;privatefinalSet<Integer>greenRowInd......
  • Webpack5-字体
    处理字体图标资源1.下载字体图标文件打开阿里巴巴矢量图标库选择想要的图标添加到购物车,统一下载到本地2.添加字体图标资源src/fonts/iconfont.ttfsrc/fonts/iconfont.woffsrc/fonts/iconfont.woff2src/css/iconfont.css注意字体文件路径需要修改sr......
  • Openlayers高级交互(4/20):手绘多边形,导出KML文件,可以自定义name和style
    KML(KeyholeMarkupLanguage)是一种基于XML的文件格式,用于表示地理数据并在地球浏览器中显示这些数据。KML文件可以用来展示各种类型的地理信息,包括位置点(Point)、路径(LineString)、多边形(Polygon)以及带有地理位置的文本描述(如描述标签)。KML文件还可以包含样式信息(Style),用......
  • 移动端页面字体在微信被放大,导致排版错乱
    微信在iOS和Android平台上对网页字体大小的调整机制不同,需要分别处理。以下是如何在PBootCMS中实现这一功能的详细步骤:1.阻止iOS平台上的字体放大在PBootCMS的模板文件中,找到header.html文件(通常位于/template/你的模板名称/目录下),并在<head>标签内添加以下CSS样式:<style>......
  • ORACLE 添加自定义函数
    返回一个值createorreplaceFUNCTIONGET_KEY_BY_QUERY(AAAINVARCHAR2)RETURNNUMBERISITEM_VALUENUMBER;BEGINSELECT'TEST'INTOITEM_VALUEFROMDUAL;RETURNITEM_VALUE;END;返回结果集CREATEORREPLACEFUNCTIONGET_LIST_BY_QUERY(......
  • ORACLE 自定义函数,把字符串拆分为列/结果集
    使用REGEXP_SUBSTRSELECTREGEXP_SUBSTR(key,'[^,]+',1,ROWNUM)ASVALUEFROM(select'1,3,4,4'askeyfromdual)CONNECTBYROWNUM<=LENGTH(key)-LENGTH(REPLACE(key,',',''))+1;自定义函数:ODCIVARCHAR2LI......
  • 【C#】【DevExpress】自定义单元格右键菜单,去除单元格编辑时,载入系统的默认菜单
    使用GridView,自定义单元格的右击菜单,可以通过监听事件PopupMenuShowing,实现新增菜单。1privatevoidgridView1_PopupMenuShowing(objectsender,DevExpress.XtraGrid.Views.Grid.PopupMenuShowingEventArgse)2{3GridViewview=senderasGridView;4if......
  • django admin 后台中添加自定义的 html 页面
    实现效果配置简历模板html文件{%extends"admin/base_site.html"%}{%blockcontent%}<h1>自定义HTML页面</h1><p>{{your_variable}}</p>{%endblock%}admin中添加代码,主要是get_urls以及对应的的视图fromdjango.urlsimportpathfromdjango......