如何在Xamarin Forms中访问ControlTemplate的元素

8
我在 App.xaml 中定义了一个 ControlTemplate。现在,我需要能够处理某些 UI 事件。在 Visual Studio 的 XAML 编辑器中,如果我将处理程序附加到事件上,则处理程序将在 App.xaml.cs 中创建。但是,我需要在使用此控件模板的页面中执行此操作。
我考虑的唯一方法是遍历控件模板中的元素,找到正确的元素并在页面中创建处理程序。但是,我不知道如何从 ControlTemplate 对象中访问元素。
Xamarin 是否提供了查看 ControlTemplate 内容的方法?
3个回答

8
尽管这是一个老话题,但实际上 Xamarin Forms API 提供了以下内容,并且可以直接使用:
contentView.GetTemplateChild("nameOfTheControl")

6

如果您有一个Page实例,可以将其转换为IPageController,它的InternalChildren属性包含来自模板的控件。

这是我正在使用的查找控件的扩展方法:

public static T FindTemplateElementByName<T> (this Page page, string name)
    where T: Element
{
    var pc = page as IPageController;
    if (pc == null)
    {
        return null;
    }

    foreach (var child in pc.InternalChildren)
    {
        var result = child.FindByName<T> (name);
        if (result != null)
        {
            return result;
        }
    }

    return null;
}

模板元素是只读的,还是您也可以修改它们? - jbyrd
兄弟!你这个简直救了我的命。谢天谢地! - user875234

1

太好了。提前感谢。 - Mark13426
1
你有时间写博客并发布一些代码吗? - testing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接