2010-11-16 45 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> 

你可以看到,我有嵌套在另一個數據模板(flipItemTemplate)的內部數據模板(frontTemplate)。我需要做的是在frontTemplate中訪問Stackpanel。我所有嘗試訪問該數據模板的內容演示者都失敗了。我希望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 2010-11-16 17:14:30

+0

作爲一個側面的問題 - 現在我可以訪問該圖像,我似乎無法更改它內部的圖像源。這是dataTemplate的副作用嗎? – Dan 2010-11-16 18:01:23