2016-08-01 25 views
5

Ich habe eine ControlTemplate in App.xaml definiert. Jetzt muss ich bestimmte UI-Ereignisse verarbeiten können. Wenn ich in einem Visual Studio-XAML-Editor einen Handler an ein Ereignis anschließe, wird der Handler in App.xaml.cs erstellt. Ich muss dies jedoch in Seiten tun, die diese Steuerelementvorlage verwenden.Zugriff auf die Elemente einer ControlTemplate in Xamarin Forms

Ich denke, der einzige Weg besteht darin, durch die Elemente in der Steuerelementvorlage zu iterieren und das richtige Element zu finden und Handler in Seiten zu erstellen. Ich bin mir jedoch nicht sicher, wie ich vom ControlTemplate-Objekt auf die Elemente zugreifen kann.

Bietet Xamarin eine Möglichkeit, in den Inhalt eines ControlTemplate zu schauen?

Antwort

1

Ich habe noch keinen Weg gefunden, die Kontrollschablonen Kinder zu durchlaufen. Ich verwendete Vorlagenbindung https://developer.xamarin.com/guides/xamarin-forms/templates/control-templates/template-binding/ , um an ein Befehlsobjekt zu binden, die Eigenschaften für die Befehle werden in meiner Basisseite definiert, dann eine Basisansicht verwendet, um meine Befehle zu definieren und sie auf die Backing-Eigenschaften in der Basepage OnAppearing override festzulegen.

Ich arbeite an einem Blog-Eintrag und werde dies aktualisieren, wenn ich Code zu zeigen habe.

+0

Großen zu finden. Danke im Voraus. – Mark13426

+1

Hattest du Zeit den Blogeintrag zu schreiben, damit du Code schreiben kannst? – testing

1

Wenn Sie Seite Instanz haben, können Sie es zu IPageController werfen und es ist InternalChildren Eigenschaft steuert, von der Vorlage enthält.

Hier ist eine Erweiterung Methode, die ich bin mit Kontrollen namentlich

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; 
} 
+0

Sind die Vorlagenelemente schreibgeschützt oder können Sie sie auch ändern? – jbyrd