2009-10-28 6 views
2

J'ai un fichier XAML avec ce code:Trouver un ControlTemplate à partir du code

<GridViewColumn x:Name="lvCol3" 
       Header="Quantità" 
       Width="120"> 
    <GridViewColumn.CellTemplate> 
     <DataTemplate> 
      <Control x:Name="host"> 
       <Control.Template> 
        <ControlTemplate> 
         <TextBlock Text="{Binding Path=Entity.Quantita}" /> 
        </ControlTemplate> 
       </Control.Template> 
      </Control> 
      <DataTemplate.Triggers> 
       <DataTrigger Binding="{Binding Path=IsSelected, 
             RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}}" 
          Value="True"> 
        <Setter TargetName="host" Property="Template"> 
         <Setter.Value> 
          <ControlTemplate x:Name="myControlTemplate" /> 
         </Setter.Value> 
        </Setter> 
       </DataTrigger> 
      </DataTemplate.Triggers> 
     </DataTemplate> 
    </GridViewColumn.CellTemplate> 
</GridViewColumn> 

Je réussirais myControlTemplate de code derrière afin d'affecter différents objets de l'interface utilisateur.

J'essaie d'utiliser FindResource mais cela ne fonctionne pas. Comment puis-je faire ceci?

Répondre

3

Probablement le moyen le plus simple consiste à extraire votre ControlTemplate à une ressource: vous pouvez alors utiliser FindResource.

Quelque chose comme ceci:

<UserControl> 
    <UserControl.Resources> 
    <ControlTemplate x:Key="MyControlTemplate"> 
     <TextBlock 
      Text="{Binding Path=Entity.Quantita}"/> 
    </ControlTemplate> 
    </UserControl.Resources> 

    ... 

    <GridViewColumn 
    x:Name="lvCol3" 
    Header="Quantità" 
    Width="120"> 
     <GridViewColumn.CellTemplate> 
      <DataTemplate> 
       <Control x:Name="host" Template="{StaticResouce MyControlTemplate}"> 
       </Control> 
     </GridViewColumn.CellTemplate> 
    </GridViewColumn> 

    ... 
</UserControl> 

Ensuite, dans le code de votre UserControl (ou quel que soit l'élément racine) vous pouvez faire

var resource = FindResource("MyControlTemplate") as ControlTemplate;