找回密码
 立即注册
首页 业界区 业界 C# Avalonia动态加载xaml和cs实例

C# Avalonia动态加载xaml和cs实例

辗振 10 小时前
扩展请参考
  1. https://www.cnblogs.com/dalgleish/p/18972924
复制代码
NonCompiledXaml.axaml代码
  1. <Window xmlns="https://github.com/avaloniaui"
  2.         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  3.         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  4.         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  5.         mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
  6.         x:Class="AvaloniaUI.NonCompiledXaml"
  7.         Title="NonCompiledXaml">
  8.     <ScrollViewer>
  9.         <StackPanel Name="mainPanel" Background="#f0f0f0">
  10.             <TextBlock Text="" FontFamily="{StaticResource IconFont}" FontSize="20" Margin="5" HorizontalAlignment="Center"/>
  11.             <Button Content="加载动态内容" Click="Button_Click" Margin="0,0,0,5"/>
  12.         </StackPanel>
  13.     </ScrollViewer>
  14. </Window>
复制代码
NonCompiledXaml.axaml.cs代码,其中Window1是一个简单的Window窗口。新扩展已经支持多个cs文件编译,并且支持AvaloniaUseCompiledBindingsByDefault = true
  1. using Avalonia;
  2. using Avalonia.Controls;
  3. using Avalonia.Interactivity;
  4. using Avalonia.Platform;
  5. using Shares.Avalonia;
  6. using System;
  7. using System.IO;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace AvaloniaUI;
  11. public partial class NonCompiledXaml : Window
  12. {
  13.     public NonCompiledXaml()
  14.     {
  15.         InitializeComponent();
  16.     }
  17.     private async void Button_Click(object? sender, RoutedEventArgs e)
  18.     {
  19.         Control control =  await this.RunResourceAsync("Window1");
  20.         mainPanel.Children.Add(control);
  21.         var xaml = @"
  22. <UserControl xmlns='https://github.com/avaloniaui'
  23.              xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
  24.              x:Class='SampleView'>
  25.     <StackPanel Margin='20'>
  26.         <TextBlock Text='{Binding Message}' FontSize='24' Foreground='Blue'/>
  27.     </StackPanel>
  28. </UserControl>
  29. ";
  30.         var code = @"
  31. using Avalonia.Controls;
  32. using CommunityToolkit.Mvvm.ComponentModel;
  33. using CommunityToolkit.Mvvm.Input;
  34. public class SampleView : UserControl
  35. {
  36.     public SampleView()
  37.     {
  38.         this.DataContext = new ViewModel();
  39.     }
  40.     public class ViewModel : ObservableObject
  41.     {
  42.          private string message = ""Hello from dynamic SampleView!"";
  43.         public string Message
  44.         {
  45.             get => message;
  46.             set => SetProperty(ref message, value);
  47.         }
  48.     }
  49. }
  50. ";
  51.         Control xamlControl = await this.RunXamlAsync(xaml, code);
  52.         mainPanel.Children.Add(xamlControl);
  53.         var xaml1 = @"<Window xmlns=""https://github.com/avaloniaui""
  54.         xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml""
  55.         xmlns:d=""http://schemas.microsoft.com/expression/blend/2008""
  56.         xmlns:mc=""http://schemas.openxmlformats.org/markup-compatibility/2006""
  57.                  xmlns:local=""using:AvaloniaUI""
  58.         mc:Ignorable=""d"" d:DesignWidth=""800"" d:DesignHeight=""450""
  59.         x:AvaloniaUI.Window2""
  60.         Title=""Window2"">
  61.         <StackPanel Margin=""20"">
  62.                 <TextBlock x:DataType=""local:ViewModel"" Text=""{Binding Message}"" FontSize=""24"" Foreground=""Blue""/>
  63.         </StackPanel>
  64. </Window>
  65. ";
  66.         var code1 = @"using Avalonia;
  67. using Avalonia.Controls;
  68. using CommunityToolkit.Mvvm.ComponentModel;
  69. namespace AvaloniaUI;
  70. public partial class Window2 : Window
  71. {
  72.     public Window2()
  73.     {
  74.         this.DataContext = new ViewModel();
  75.     }
  76. }
  77. public class ViewModel : ObservableObject
  78.     {
  79.         private string message = ""Hello from dynamic Window2View!"";
  80.         public string Message
  81.         {
  82.             get => message;
  83.             set => SetProperty(ref message, value);
  84.         }
  85.     }
  86. ";
  87.         Control xamlControl1 = await this.RunXamlAsync(xaml1, code1,"Window2");
  88.         mainPanel.Children.Add(xamlControl1);
  89.     }
  90. }
复制代码
运行效果
1.png

 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册