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

如何在Xamarin StackLayout中获取嵌套的CtrlButton控件

解决StackLayout中获取嵌套CtrlButton的问题

你当前的代码只遍历了xGrpTabBtns的直接子元素,但你的CtrlButton是嵌套在Grid这类容器控件里的间接子元素,所以直接筛选Children会返回空。要拿到所有层级的CtrlButton,得用递归遍历的方式,把每个容器控件的子元素都查一遍。

递归查找方法

写一个通用的递归方法,遍历所有层级的控件:

private IEnumerable<CtrlButton> FindAllCtrlButtons(VisualElement parent)
{
    var buttonList = new List<CtrlButton>();
    
    // 判断当前父元素是否是布局容器
    if (parent is Layout layoutContainer)
    {
        foreach (var child in layoutContainer.Children)
        {
            // 找到直接的CtrlButton就加入列表
            if (child is CtrlButton targetBtn)
            {
                buttonList.Add(targetBtn);
            }
            // 如果子元素也是容器,继续递归查找
            else if (child is VisualElement nestedContainer)
            {
                buttonList.AddRange(FindAllCtrlButtons(nestedContainer));
            }
        }
    }
    
    return buttonList;
}

调用方式

直接传入你的StackLayout实例就能获取所有嵌套的CtrlButton:

var allCtrlButtons = FindAllCtrlButtons(this.xGrpTabBtns);

注意事项

  • 确保CtrlButton继承自VisualElement(MAUI/Xamarin.Forms的自定义控件一般都满足这个前提);
  • 如果你的项目用的是其他UI框架,只需调整判断容器控件的类型(比如WPF里的Panel)即可适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:05:22