2009-10-05 12 views
7

Ich habe ein Benutzersteuerelement, das einen Stil auf die Schaltfläche anwendet, wobei der Stil einen ControlTemplate-Abschnitt enthält. Innerhalb der ControlTemplate gibt es verschiedene UI-Elemente wie Ellipse und Path.WPF Set benannte Style-Elemente aus Code hinter?

Wenn ich diesen Elementen - Ellipse und Pfad - einen Namen mit x: Name gebe, kann ich auf sie von Code hinten zugreifen?

Es scheint, dass die Ellipse und der Pfad des Stils nicht sichtbar sind, da ich einen Kompilierfehler (C#) erhalte.

Gehe ich in die falsche Richtung?

Antwort

18

Da eine Vorlage mehrfach instanziiert werden kann, ist es nicht möglich, ein generiertes Element über x:Name zu binden. Stattdessen müssen Sie das benannte Element in der Vorlage finden, die auf ein Steuerelement angewendet wird.

Gegeben vereinfacht XAML:

<ControlTemplate x:Key="MyTemplate"> 
    <Ellipse x:Name="MyEllipse" /> 
</ControlTemplate> 

Sie würden so etwas tun:

var template = (ControlTemplate)FindResource("MyTemplate"); 

template.FindName("MyEllipse", myControl); 

Oder noch einfacher:

var ellipse = (Ellipse)myControl.Template.FindName("MyEllipse", myControl); 

Sie können über FrameworkTemplate.FindName lesen.

Einige Beispiele und Diskussion here, here und here.

+0

Perfekt, vielen Dank! – MattJ

+11

Wenn es perfekt ist, dann markieren Sie es als Antwort. – Vaccano