首页 > 解决方案 > Xamarin Forms 使用什么机制来检测内容页面和内容视图背后代码中的命名控件?

问题描述

我需要实现一个从 ControlTemplate 派生但能够检测代码隐藏文件中的控件的控件。我需要了解这在内容页面/视图中是如何工作的

标签: xamarinxamarin.forms

解决方案


有一个名为 XamlG/UpdateDesignTimeXaml 的 MSBuild 任务生成具有您已x:Name定义为全局命名空间类级变量的视图的分部类,从而生成以下变量代码:

private global::Xamarin.Forms.Entry someEntryControl;

然后在该文件的InitializeComponent方法中,FindByName扩展用于通过该变量名称的基于字符串的查找将实际运行时实例分配给先前定义的变量:

someEntryControl = global::Xamarin.Forms.NameScopeExtensions.FindByName<global::Xamarin.Forms.Entry>(this, "someEntryControl");

如果您深入 XAMLFindByName代码依赖项的兔子洞,您将看到它基本上执行该视图范围内所有 BindableObjects 的迭代,直到找到匹配的名称或返回null


推荐阅读