扩展请参考

https://www.cnblogs.com/dalgleish/p/18972924

NonCompiledXaml.axaml代码

<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="450"
x:Class="AvaloniaUI.NonCompiledXaml"
Title="NonCompiledXaml">
<ScrollViewer>
<StackPanel Name="mainPanel" Background="#f0f0f0">
<TextBlock Text="" FontFamily="{StaticResource IconFont}" FontSize="20" Margin="5" HorizontalAlignment="Center"/>
<Button Content="加载动态内容" Click="Button_Click" Margin="0,0,0,5"/>
</StackPanel>
</ScrollViewer>
</Window>

NonCompiledXaml.axaml.cs代码,其中Window1是一个简单的Window窗口。新扩展已经支持多个cs文件编译,并且支持AvaloniaUseCompiledBindingsByDefault = true

using Avalonia;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Platform;
using Shares.Avalonia;
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks; namespace AvaloniaUI; public partial class NonCompiledXaml : Window
{
public NonCompiledXaml()
{
InitializeComponent();
}
private async void Button_Click(object? sender, RoutedEventArgs e)
{
Control control = await this.RunResourceAsync("Window1");
mainPanel.Children.Add(control);
var xaml = @"
<UserControl xmlns='https://github.com/avaloniaui'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
x:Class='SampleView'>
<StackPanel Margin='20'>
<TextBlock Text='{Binding Message}' FontSize='24' Foreground='Blue'/>
</StackPanel>
</UserControl>
"; var code = @"
using Avalonia.Controls;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input; public class SampleView : UserControl
{
public SampleView()
{
this.DataContext = new ViewModel();
} public class ViewModel : ObservableObject
{
private string message = ""Hello from dynamic SampleView!""; public string Message
{
get => message;
set => SetProperty(ref message, value);
}
}
}
";
Control xamlControl = await this.RunXamlAsync(xaml, code);
mainPanel.Children.Add(xamlControl); var xaml1 = @"<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""
xmlns:local=""using:AvaloniaUI""
mc:Ignorable=""d"" d:DesignWidth=""800"" d:DesignHeight=""450""
x:Class=""AvaloniaUI.Window2""
Title=""Window2"">
<StackPanel Margin=""20"">
<TextBlock x:DataType=""local:ViewModel"" Text=""{Binding Message}"" FontSize=""24"" Foreground=""Blue""/>
</StackPanel>
</Window>
";
var code1 = @"using Avalonia;
using Avalonia.Controls;
using CommunityToolkit.Mvvm.ComponentModel; namespace AvaloniaUI; public partial class Window2 : Window
{
public Window2()
{
this.DataContext = new ViewModel();
}
}
public class ViewModel : ObservableObject
{
private string message = ""Hello from dynamic Window2View!""; public string Message
{
get => message;
set => SetProperty(ref message, value);
}
}
";
Control xamlControl1 = await this.RunXamlAsync(xaml1, code1,"Window2");
mainPanel.Children.Add(xamlControl1);
}
}

运行效果

C# Avalonia动态加载xaml和cs实例的更多相关文章

  1. [WPF学习笔记]动态加载XAML

    好久没写Blogs了,现在在看[WPF编程宝典],决定开始重新写博客,和大家一起分享技术. 在编程时我们常希望界面是动态的,可以随时变换而不需要重新编译自己的代码. 以下是动态加载XAML的一个事例代 ...

  2. XamlReader 动态加载XAML

    原文:XamlReader 动态加载XAML XAML: <Grid xmlns:x="http://schemas.microsoft.com/client/2006" x ...

  3. WPF中动态加载XAML中的控件

    原文:WPF中动态加载XAML中的控件 using System; using System.Collections.Generic; using System.Linq; using System. ...

  4. 三种动态加载js的jquery实例代码另附去除js方法

    !-- 这里为你提供了三种动态加载js的jquery实例代码哦,由于jquery是为用户提供方便的,所以利用jquery动态加载文件只要一句话$.getscript("test.js&quo ...

  5. js实现动态加载脚本的方法实例汇总

      本文实例讲述了js实现动态加载脚本的方法.分享给大家供大家参考,具体如下: 最近公司的前端地图产品需要做一下模块划分,希望用户用到哪一块的功能再加载哪一块的模块,这样可以提高用户体验. 所以到处查 ...

  6. Echarts动态加载饼状图实例(二)

    一.引入echarts.js文件(下载页:http://echarts.baidu.com/download.html) 二.HTML代码: <div class="ui-contai ...

  7. ECharts动态加载堆叠柱状图的实例

    一.引入echarts.js文件(下载页:http://echarts.baidu.com/download.html) 二.HTML代码: <div style="width: 10 ...

  8. 动态加载XAML

    string FadeInStoryBoard = "<StoryBoard ... />"; StoryBoard storyBoard = XamlReader.L ...

  9. 用MVVM模式开发中遇到的零散问题总结(5)——将动态加载的可视元素保存为图片的控件,Binding刷新的时机

    原文:用MVVM模式开发中遇到的零散问题总结(5)--将动态加载的可视元素保存为图片的控件,Binding刷新的时机 在项目开发中经常会遇到这样一种情况,就是需要将用户填写的信息排版到一张表单中,供打 ...

  10. 【Java接口实现动态加载不同的类】

    public interface Person {       public double calcuMonthlySalary(double sal, int type);    }   publi ...

随机推荐

  1. 微软正式发布 .NET 10 Preview 3

    2025年4月11日,.NET团队在博客上宣布了.NET 10 Preview 3的正式发布,文章参见:https://devblogs.microsoft.com/dotnet/dotnet-10- ...

  2. 详细介绍java的线程池状态

    一.详细介绍java的线程池状态 Java 中的线程池状态是 ThreadPoolExecutor 类内部管理的一个重要概念.线程池的状态决定了线程池的行为,例如是否接受新任务.是否处理队列中的任务. ...

  3. Spring Bean的声明方式

    一.环境说明 项目结构 StudentService package com.cookie.service; /** * @author cxq * @version 1.0 * @date 2020 ...

  4. 网络开发中的Reactor(反应堆模式)和Proacrot(异步模式)

    服务器程序重点处理IO事件,即:用户的请求读出来,反序列化,回调业务处理,回写.如果在按照面向过程的思路去写,就发挥不出CPU并发优势.那么有没有更优雅的设计方式呢? 有的兄弟,有的. Reactor ...

  5. 在 Go 语言中,构造一个并发安全的 map 集合

    Map 集合是 Go 中提供的一个 KV 结构的数据类型,对它的操作在实际的开发中应该是非常多的,不过它不是一个线程安全的. 1 .Map 不是线程安全的 编写下面的测试代码: func TestUn ...

  6. 有的时候,可能会继承基础样式,利用BasedOn="{StaticResource {x:Type TextBlock}}"

    有的时候,可能会继承基础样式,利用BasedOn="{StaticResource {x:Type TextBlock}}" 例如: 1 <Window x:Class=&q ...

  7. centos7-NFS-网络文件系统

    NFS(network file system)网络文件系统 pdf文档下载链接 https://files.cnblogs.com/files/duxingren/NFS.zip 服务器192.16 ...

  8. Quartz.Net定时任务

    参照: [项目升级]集成Quartz.Net Job实现(一) - 腾讯云开发者社区-腾讯云 (tencent.com) Quartz分布式任务调度 - 掘金 (juejin.cn) 基本概念: Qu ...

  9. <HarmonyOS第一课01>HarmonyOS介绍

    视频链接: https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101717496599725471?ha_sou ...

  10. 【记录】OJ|区间DP|石子合并(环形)

    1. 题干 描述 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出一个算法,计算出将N堆石子 ...