2010-11-16 2 views
1

Итак, я видел множество примеров, когда у кого-то есть отличный шаблон данных с элементом управления в нем, и их контроль содержимого применяет шаблон, а их код позади требует захвата Это.WPF Как получить элемент управления во вложенном шаблоне

Но что у меня есть это:

<DataTemplate x:Key="frontTemplate" > 
    <StackPanel x:Name="noWork"> 
     <Image Source="Images/1.png" Stretch="Fill" Width="72" Height="96" x:Name="FrontFace" HorizontalAlignment="Left" VerticalAlignment="Top"></Image> 
    </StackPanel> 
</DataTemplate> 

<DataTemplate x:Key="flipItemTemplate"> 
    <Grid Width="200" Height="200"> 
     <Border x:Name="frontHost" Background="Transparent"> 
      <ContentPresenter Content="{Binding}" ContentTemplate="{StaticResource frontTemplate}" /> 
     </Border> 
    </Grid> 
</DataTemplate> 

Вы можете видеть, что у меня есть шаблон данных (frontTemplate) вложен внутрь другого шаблона данных (flipItemTemplate). Что мне нужно сделать, так это получить доступ к Stackpanel в FrontTemplate. Все мои попытки добраться до презентатора контента для этого шаблона данных не удались. Я надеюсь, что мудрые мудрецы StackOverflow могут мне помочь. Как во имя Бога я попаду на эту панель ????

Спасибо!

ответ

3

Если XAML определяется следующим образом:

<Grid Name="mainGrid"> 
    <Grid.Resources> 
    <DataTemplate x:Key="frontTemplate" > 
     <StackPanel x:Name="noWork"> 
      <Image Source="Images/1.png" Stretch="Fill" Width="72" Height="96" x:Name="FrontFace" HorizontalAlignment="Left" VerticalAlignment="Top"></Image> 
     </StackPanel> 
    </DataTemplate> 

    <DataTemplate x:Key="flipItemTemplate"> 
     <Grid Width="200" Height="200"> 

      <Border x:Name="frontHost" Background="Transparent"> 
       <ContentPresenter Name="contentPresenter" Content="{Binding}" ContentTemplate="{StaticResource frontTemplate}" /> 
      </Border> 
     </Grid> 
    </DataTemplate> 
    </Grid.Resources> 
</Grid> 

Вы можете использовать:

var template = mainGrid.FindResource("frontTemplate") as DataTemplate; 
var stackPanel = template.LoadContent() as StackPanel; 
+0

Спасибо! Это решило! и упростил его! – Dan

+0

В качестве побочного вопроса - теперь, когда я могу получить доступ к изображению, я не могу изменить источник изображения внутри него. Это побочный эффект dataTemplate? – Dan

Смежные вопросы