• Avalonia踩坑


    1.ResourceDictionary文件报错“Unable to cast object of type ‘Avalonia.Controls.ResourceDictionary’ to type ‘Avalonia.Controls.Control’”

    解决方法:因为这些文件不能被转换成控件,所以不能被预览,这时候按下功能键F7,切换到“XAML View”,就能消除这个报错。

    2.应用阿里巴巴IconFont

    2.1. 应用

    2.1.1 首先下载iconfont文件,并添加到项目
    在这里插入图片描述
    2.1.2在App.axaml文件中引入字体

      <Application.Resources>
            <ResourceDictionary>
                <FontFamily x:Key="IconFont">/Assets/Fonts/#iconfontFontFamily>
            ResourceDictionary>
        Application.Resources>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.1.3应用

    <TextBlock
                    FontFamily="{StaticResource IconFont}"
                    FontSize="30"
                    Foreground="white"
                    Text="" />
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.2 坑

    如果在样式文件中定义了Textblock的样式,像这样

    <Style Selector="TextBlock.Manual">
            "Text" Value="" />
    Style>
    
    • 1
    • 2
    • 3

    并在App.axaml文件中引入

    <Application.Styles>
            <StyleInclude Source="/Styles/WpTextBlock.axaml" />
            <FluentTheme Mode="Dark" />
    Application.Styles>
    
    • 1
    • 2
    • 3
    • 4

    像下面这样应用是没问题的

    <TextBlock
                    Classes="Manual"
                    FontFamily="{StaticResource IconFont}"
                    FontSize="30"
                    Foreground="white" />
    
    • 1
    • 2
    • 3
    • 4
    • 5

    **但是,未使用样式文件中样式的其他TextBlock将不会显示。就算像下面这样写也不会显示不是不会显示,是会被覆盖掉!!! **

    <TextBlock
                    FontFamily="{StaticResource IconFont}"
                    FontSize="30"
                    Foreground="white"
                    Text="" />
    
    • 1
    • 2
    • 3
    • 4
    • 5

    不过,Label可以显示

    3.深入浅出Avalonia.Xaml.Behaviors

    avalonia ui控件事件转命令包
    项目地址
    Nuget包地址
    安装指令:

    dotnet add package Avalonia.Xaml.Behaviors --version 11.0.0-preview4
    
    • 1

    3.1应用实例:

    一、前端:

    首先引入命名空间

    xmlns:i="clr-namespace:Avalonia.Xaml.Interactivity;assembly=Avalonia.Xaml.Interactivity"
    xmlns:ia="clr-namespace:Avalonia.Xaml.Interactions.Core;assembly=Avalonia.Xaml.Interactions"
    
    • 1
    • 2

    将事件转为命令

                <TreeView x:Name="Navigation"
                          Classes="navigation">
                    <TreeViewItem Classes="navigation"
                                  Header="选项1">
                        <TreeViewItem Classes="navigation"
                                      Header="选项12" />
                        <TreeViewItem Classes="navigation"
                                      Header="选项13" />
                    TreeViewItem>
                    <TreeViewItem Classes="navigation"
                                  Header="选项2" />
                    <TreeViewItem Classes="navigation"
                                  Header="选项3" />
                    <i:Interaction.Behaviors>
                        <ia:EventTriggerBehavior EventName="PointerReleased">
                            <ia:InvokeCommandAction Command="{Binding NavigationItemClickCmd}"
                                                    CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self}, Path=SelectedItem}" />
    
                            
                        ia:EventTriggerBehavior>
                    i:Interaction.Behaviors>
                TreeView>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    二、后端
     private ICommand _navigationItemClickCmd;
    
            public ICommand NavigationItemClickCmd
            {
                get
                {
                    _navigationItemClickCmd = ReactiveCommand.Create<TreeViewItem>(tvi =>
                    {
                        if (tvi is not null)
                        {
                            tvi.IsExpanded = !tvi.IsExpanded;
                        }
                    });
                    return _navigationItemClickCmd;
                }
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 相关阅读:
    效率回归,工具库之美「GitHub 热点速览」
    侯捷 C++ STL标准库和泛型编程 —— 3 容器(序列式容器)
    200 多个 npm 包被攻击,Azure 开发者请注意
    SequoiaDB湖仓一体分布式数据库2022.11月刊
    华为Pura 70 Ultra可发送卫星图片,卫星通信升级再突破!
    C声明和初始化和赋值
    CodeJock Active-X / COM v22.1.0 Crack
    代码管理工具-Git基础介绍及常用技巧
    【论文解读】CP-SLAM: Collaborative Neural Point-based SLAM System_神经点云协同SLAM系统(上)
    Linux学习——进程间通信
  • 原文地址:https://blog.csdn.net/wu_pan123/article/details/127999011