2009-09-12 1 views
0

Я пытаюсь получить доступ к названию TextBox (textBoxAnswer) в коде, стоящем за моей страницей WPF. Беда в том, что она является частью DataTemplate, она не автогенерируется как частный член класса, как если бы я не использовал ContentPresenter + DataTemplate. (Я использую , потому что мне нужно использовать DataTrigger s, не включенный в пример ниже).Доступ к названному TextBox в коде, указанном в DataTemplate ContentPresenter

Я пробовал звонить FindResource("textBoxAnswer") и FindName("textBoxAnswer"), но ничего не возвращаю.

Любые предложения? Вот урезанная версия моего 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> 

ответ

1

Дайте имя к ContentPresenter (я буду считать это cpAnswer), и получить доступ к текстовому полю с FindName методом шаблона:

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

блестящий, спасибо! Я принял ответ, но у вас была небольшая ошибка, которую я исправил - должен быть .ContentTemplate, а не .DataTemplate. Кроме того, его нельзя вызывать в конструкторе, но только после загрузки страницы. –