【问题标题】:How to access the elements of a ControlTemplate in Xamarin Forms如何在 Xamarin 窗体中访问 ControlTemplate 的元素
【发布时间】:2016-08-01 03:24:59
【问题描述】:

我在 App.xaml 中定义了一个 ControlTemplate。现在,我需要能够处理某些 UI 事件。在 Visual Studio 的 XAML 编辑器中,如果我将处理程序附加到事件,则会在 App.xaml.cs 中创建处理程序。但是,我需要在使用此控件模板的页面中执行此操作。

我认为唯一的方法是遍历控件模板中的元素并找到正确的元素并在页面中创建处理程序。但是,我不确定如何访问 ControlTemplate 对象中的元素。

Xamarin 是否提供查看 ControlTemplate 内容的方法?

【问题讨论】:

    标签: xaml xamarin.forms controltemplate


    【解决方案1】:

    虽然这是一个老话题,但实际的 Xamarin Forms API 提供了以下内容并且开箱即用:

    contentView.GetTemplateChild("nameOfTheControl")
    

    【讨论】:

      【解决方案2】:

      如果您有 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;
      }
      

      【讨论】:

      • 模板元素是只读的,还是你也可以修改它们?
      • 老兄!你真的用这个救了我的命。谢天谢地!
      【解决方案3】:

      我还没有找到一种方法来遍历控件模板子项。 我使用了模板绑定 https://developer.xamarin.com/guides/xamarin-forms/templates/control-templates/template-binding/ 要绑定到命令对象,命令的属性在我的基本页面中定义,然后使用基本视图来定义我的命令并将它们设置为基本页面 OnAppearing 覆盖中的绑定支持属性。

      我正在写一篇博客文章,当我有代码要显示时会更新它。

      【讨论】:

      • 太棒了。提前致谢。
      • 你有时间写博客文章以便发布一些代码吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多