2009-09-12 8 views
0

J'essaie d'accéder à un TextBox (textBoxAnswer) nommé dans le code derrière ma page WPF. Le problème est, car il fait partie d'un DataTemplate, il n'est pas généré automatiquement en tant que membre privé de la classe, comme ce serait le cas si je n'utilisais pas le ContentPresenter + DataTemplate. (J'utilise le DataTemplate car j'ai besoin d'utiliser DataTrigger s, non inclus dans l'exemple ci-dessous).Accéder à un TextBox nommé dans le code derrière un DataTemplate d'un ContentPresenter

J'ai essayé d'appeler FindResource("textBoxAnswer") et FindName("textBoxAnswer"), mais aucun ne retourne rien.

Des suggestions? Voici une version dépouillée de mon XAML:

<Page x:Class="LearningGames.Numbers.NumbersPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
<ContentPresenter Content="{Binding}"> 
    <ContentPresenter.ContentTemplate> 
     <DataTemplate> 
      <Grid> 
       <TextBox Margin="5" x:Name="textBoxAnswer" 
       Text="{Binding Answer}" /> 
      </Grid> 
     </DataTemplate> 
    </ContentPresenter.ContentTemplate> 
</ContentPresenter> 

Répondre

1

Donnez un nom à la ContentPresenter (je suppose qu'il est cpAnswer), et accéder à la zone de texte avec la méthode FindName du modèle:

TextBox textBoxAnswer = cpAnswer.ContentTemplate.FindName("textBoxAnswer", cpAnswer) 
as TextBox; 
+0

brillant, merci! J'ai accepté la réponse, mais vous avez eu une petite erreur que j'ai corrigée - devrait être .ContentTemplate, pas .DataTemplate. En outre, ne devrait pas être appelé dans le constructeur, mais seulement après le chargement de la page. –

Questions connexes