Token导航 LogoToken导航TokenDH.com
待分类权限需确认github未标认证来源可访问许可证需确认审计通过

maui-custom-handlers毛伊岛自定义处理程序

Agent Skill

maui-custom-handlers 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要围绕仓库状态、代码变更或协作事项进行整理时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

392

周安装

16

GitHub Stars

129

下载量

127
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:maui-custom-handlers(毛伊岛自定义处理程序)
来源仓库:https://github.com/davidortinau/maui-skills
仓库路径:skills/maui-custom-handlers
安装命令:
npx skills add https://github.com/davidortinau/maui-skills --skill maui-custom-handlers
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/davidortinau/maui-skills --skill maui-custom-handlers

简介

用于处理 GitHub 仓库、Issue 和 Pull Request 信息。

  • 适合围绕代码变更和协作事项进行整理。maui-custom-handlers 属于待分类类 Skill,可作为该场景下的辅助能力补充。
  • 可结合来源仓库和原始 README 核验具体用法。
  • 安装前建议确认权限范围和是否会触发命令执行。
  • 维护状态不明时需人工复核功能稳定性。

SKILL.md

.NET MAUI Custom Handlers

Decision: Customize Existing vs. Create New

ScenarioApproach
Change how a built-in control looks/behaves on one platformCustomize — use AppendToMapping / PrependToMapping
Need the change on only some instances of a controlCustomize — subclass the control + type-check in mapper
Need a completely new cross-platform control with native backingCreate new handler with partial classes
⚠️ Prefer AppendToMapping over ModifyMapping. ModifyMapping replaces the default mapper action entirely — if the framework adds behaviour in a future release, your override silently drops it.

Gotchas & Common Mistakes

Mapper customizations are global

Every instance of the control is affected. Guard with a subclass check for instance-specific behaviour:

// ❌ Removes borders from EVERY Entry in the app
EntryHandler.Mapper.AppendToMapping("NoBorder", (handler, view) =>
{
#if ANDROID
    handler.PlatformView.Background = null;
#endif
});

// ✅ Only affects BorderlessEntry instances
EntryHandler.Mapper.AppendToMapping("NoBorder", (handler, view) =>
{
    if (view is not BorderlessEntry) return;
#if ANDROID
    handler.PlatformView.Background = null;
#endif
});

Unsubscribe native events in HandlerChanging

Failing to remove native event handlers causes memory leaks because the native view may outlive the managed wrapper.

// ❌ Subscribes but never unsubscribes — leaks
entry.HandlerChanged += (s, e) =>
{
#if ANDROID
    ((Entry)s!).Handler!.PlatformView.As<Android.Widget.EditText>()!
        .FocusChange += OnNativeFocusChange;
#endif
};

// ✅ Pair subscribe in HandlerChanged with unsubscribe in HandlerChanging
entry.HandlerChanged += OnHandlerChanged;
entry.HandlerChanging += OnHandlerChanging;

Partial class name/namespace mismatch

Namespace and class name must match exactly across the shared handler file and every platform file. A mismatch silently creates separate classes — no compiler error, just a handler that does nothing on that platform.

Conditional using placement

The using PlatformView =... aliases must be at the top of the shared handler file (not the platform files) so the ViewHandler<TControl, TPlatformView> base-class generic resolves correctly per platform.

// ✅ Top of Handlers/VideoPlayerHandler.cs
#if ANDROID
using PlatformView = Android.Widget.VideoView;
#elif IOS || MACCATALYST
using PlatformView = AVKit.AVPlayerViewController;
#elif WINDOWS
using PlatformView = Microsoft.UI.Xaml.Controls.MediaPlayerElement;
#endif

Missing CreatePlatformView()

Each platform partial must override CreatePlatformView(). Omitting it produces a compile error — but the error message points at the base class, not your handler, making it confusing to debug.


Mapper Method Selection

MethodRiskUse when
AppendToMappingLow — runs after defaultAdding behaviour without breaking defaults
PrependToMappingLow — runs before defaultSetting initial state that the default can override
ModifyMapping⚠️ High — replaces defaultYou intentionally want to suppress the framework's mapper logic

PropertyMapper vs. CommandMapper

MapperPurposePattern
PropertyMapperSync a bindable property to the native viewRuns whenever the property value changes
CommandMapperFire-and-forget action from control → handlerRuns once per invocation, no return value
⚠️ Don't put property sync logic in CommandMapper — it won't re-run when the property changes, leading to stale native views.

Checklist — New Handler

  • Cross-platform control inherits View (or appropriate base)
  • Shared handler file has conditional using PlatformView =... aliases
  • Handler inherits ViewHandler<TControl, PlatformView>
  • PropertyMapper maps every bindable property
  • Each platform partial overrides CreatePlatformView()
  • Namespace + class name identical across all partial files
  • Handler registered in MauiProgram.cs via ConfigureMauiHandlers
  • Native event subscriptions cleaned up in HandlerChanging

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

37.09%
按下载量换算47

Claude

30.94%
按下载量换算39

Cursor

19.64%
按下载量换算25

Gemini CLI

8.42%
按下载量换算11

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

权限需确认

当前来源未能明确判断权限范围,默认进入异常复核队列。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills