老规矩,在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.";
    }
}

运行结果如下(点击按钮后)

 

posted on 2025-06-13 13:29  dalgleish  阅读(5)  评论(0)    收藏  举报