You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI中如何从类库向页面添加Borderless Entry

解决类库中创建主项目BorderlessEntry的问题

核心问题是项目引用方向限制:主项目引用类库,但类库不能反向引用主项目,因此无法直接在类库中使用主项目定义的BorderlessEntry类型,以下是三种可行解决方案:

方案1:将BorderlessEntry相关逻辑迁移到类库(推荐)

把控件定义、Handler配置都移到类库,让主项目依赖类库的控件,从根源解决引用问题:

  1. 在类库中创建BorderlessEntry类
namespace ClassLibrary7;
public class BorderlessEntry : Entry
{
}
  1. 在类库中添加Handler初始化逻辑
    创建静态类统一管理平台Handler配置,让主项目启动时调用:
namespace ClassLibrary7;
public static class BorderlessEntrySetup
{
    public static void Initialize()
    {
        // 示例:Windows平台移除边框的Handler配置
#if WINDOWS
        Microsoft.Maui.Handlers.EntryHandler.Mapper.AppendToMapping(nameof(BorderlessEntry), (handler, view) =>
        {
            if (view is BorderlessEntry)
            {
                handler.PlatformView.BorderThickness = new Microsoft.UI.Xaml.Thickness(0);
            }
        });
#endif
        // 其他平台的边框移除逻辑同理添加
    }
}
  1. 主项目中初始化Handler
    在App.xaml.cs的构造函数中调用类库的初始化方法:
public App()
{
    InitializeComponent();
    ClassLibrary7.BorderlessEntrySetup.Initialize();
    MainPage = new MainPage();
}
  1. 修改类库的AddEntryControl方法
    现在可以直接创建BorderlessEntry实例:
namespace ClassLibrary7;
public static class Class1
{
    public static void AddEntryControl(VerticalStackLayout layout)
    {
        var newEntry = new BorderlessEntry()
        {
            Placeholder = "Borderless Entry Added From Class Library",
            PlaceholderColor = Colors.Red,
        };
        layout.Add(newEntry);
    }
}

方案2:通过委托注入创建实例

类库不直接依赖BorderlessEntry,而是由主项目传入创建实例的委托:

  1. 修改类库的AddEntryControl方法
    新增一个Func<Entry>类型的参数,用于接收创建Entry的逻辑:
namespace ClassLibrary7;
public static class Class1
{
    public static void AddEntryControl(VerticalStackLayout layout, Func<Entry> createEntryDelegate)
    {
        var newEntry = createEntryDelegate();
        newEntry.Placeholder = "Borderless Entry Added From Class Library";
        newEntry.PlaceholderColor = Colors.Red;
        layout.Add(newEntry);
    }
}
  1. 主项目调用时传入委托
    在MainPage构造函数中,传入创建BorderlessEntry的逻辑:
public MainPage()
{
    InitializeComponent();
    // 原有代码...
    Class1.AddEntryControl(EntryLayout, () => new BorderlessEntry());
}

方案3:基于接口的工厂模式

通过定义接口解耦类库与主项目的类型依赖:

  1. 类库中定义工厂接口
namespace ClassLibrary7;
public interface IEntryFactory
{
    Entry CreateBorderlessEntry();
}
  1. 主项目实现接口
public class EntryFactory : ClassLibrary7.IEntryFactory
{
    public Entry CreateBorderlessEntry()
    {
        return new BorderlessEntry();
    }
}
  1. 修改类库的AddEntryControl方法
    接收接口实例并创建控件:
namespace ClassLibrary7;
public static class Class1
{
    public static void AddEntryControl(VerticalStackLayout layout, IEntryFactory entryFactory)
    {
        var newEntry = entryFactory.CreateBorderlessEntry();
        newEntry.Placeholder = "Borderless Entry Added From Class Library";
        newEntry.PlaceholderColor = Colors.Red;
        layout.Add(newEntry);
    }
}
  1. 主项目调用时传入实现类
public MainPage()
{
    InitializeComponent();
    // 原有代码...
    Class1.AddEntryControl(EntryLayout, new EntryFactory());
}

内容的提问来源于stack exchange,提问作者GDT48

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 15:27:02