老规矩,在AppShell.xaml.cs代码中,添加一行代码,把这个demo加到导航栏中。
this.Navigate("MauiViews.MauiDemos.Book._02.NonCompiledXaml");
因为要使用到CommunityToolkit中的DockLayout,所以请在NuGet包中搜索下面。
然后在MauiProgram.cs指定调用这个包。
using CommunityToolkit.Maui; using Syncfusion.Maui.Toolkit.Hosting; namespace MauiViews { public static class MauiProgram { public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); builder .UseMauiApp<App>() .UseMauiCommunityToolkit() //写入这条代码即可 .UseMauiCommunityToolkitMediaElement() .ConfigureSyncfusionToolkit() .ConfigureFonts(fonts => { fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); fonts.AddFont("IconFont.ttf", "IconFont"); fonts.AddFont("Roboto-Medium.ttf", "RobotoMedium"); fonts.AddFont("Roboto-Regular.ttf", "Roboto"); fonts.AddFont("SyncFontIcons.ttf", "SyncFontIcons"); fonts.AddFont("SegmentIcon.ttf", "SegmentIcon"); }); #if DEBUG builder.Logging.AddDebug(); #endif return builder.Build(); } } }
NonCompiledXaml.xaml代码如下
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:tk="http://schemas.microsoft.com/dotnet/2022/maui/toolkit" x:Class="MauiViews.MauiDemos.Book._02.NonCompiledXaml" Title="NonCompiledXaml"> <tk:DockLayout> <Button x:Name="button1" Text="Please Click Me" Margin="30"/> </tk:DockLayout> </ContentPage>
对应的cs文件代码如下
namespace MauiViews.MauiDemos.Book._02; public partial class NonCompiledXaml : ContentPage { public NonCompiledXaml() { InitializeComponent(); // 这里可以添加其他初始化代码 WidthRequest = HeightRequest = 285; LoadXamlContent("D://Codes//CSharp//Maui//MauiViews//MauiDemos//Book//02//NonCompiledXaml.xaml"); } private void LoadXamlContent(string xamlFile) { try { if (!File.Exists(xamlFile)) { DisplayAlert("Error", "XAML file not found", "OK"); return; } string xamlContent = File.ReadAllText(xamlFile); var contentPage = new ContentPage(); contentPage.LoadFromXaml(xamlContent); this.Content = contentPage.Content; button1 = (Button)contentPage.FindByName("button1"); if (button1 == null) { DisplayAlert("Warning", "Button not found in XAML", "OK"); return; } button1.Clicked += Button1_Clicked; } catch (Exception ex) { DisplayAlert("Error", $"Load failed: {ex.Message}", "OK"); } } private void Button1_Clicked(object? sender, EventArgs e) { button1.Text = "Thank you."; } }
运行结果如下(点击按钮后)