Comment accéder à un contrôle WPF situé dans un ControlTemplate?

Habituellement, les contrôles WPF sont déclarés dans le .fichiers xaml et non dans le code derrière (.XAML.fichiers cs). Cependant, parfois, j'ai besoin d'utiliser certains de ces contrôles dans le code pour les manipuler. Comment puis-je obtenir le handle d'un tel contrôle, s'il "réside" dans le fichier xaml?

23
demandé sur Dave Clemmer 2009-05-04 17:54:09

2 réponses

Vous pouvez utiliser la méthode FindName() de la classe ControlTemplate.

// Finding the grid that is generated by the ControlTemplate of the Button
Grid gridInTemplate = (Grid)myButton1.Template.FindName("grid", myButton1);
32
répondu CSharper 2009-05-04 13:55:20

Je ne suis pas sûr de ce que vous demandez, alors je vais essayer de répondre aux deux instances que j'interprète comme votre question.

1) Si vous voulez déclarer un contrôle explicite, puis le modifier directement, tout ce que vous avez à faire est de définir la propriété name comme telle:

<Canvas x:Name="myCanvas"/>

Vous pouvez ensuite accéder au canevas via le nom en tant que tel:

myCanvas.Background = Brushes.Blue;

2) Si vous cherchez à déclarer un contrôle générique, puis à l'utiliser plusieurs fois, vous pouvez le faire comme ceci:

<Window>
   <Window.Resources>
      <Ellipse x:Key="myEllipse" Height="10" Width="10">
   </Window.Resources>
</Window>

Vous pouvez alors accédez à ce contrôle prédéfini en utilisant cette syntaxe dans le code:

Ellipse tempEllipse = (Ellipse)FindResource("MyEllipse");

Si vous souhaitez utiliser le Resourse comme modèle pour plusieurs contrôles, ajoutez x: Shared= "false".

4
répondu Drew McGhie 2009-05-04 14:48:23