扩展请参考- 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: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);
- }
- }
复制代码 运行效果
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |