2009-03-04 7 views
0

Je suis nouveau au modèle de programmation WPF. J'ai quelques requêtes:WPF FrameworkElement

  1. Est-ce que la page balise en XAML (dans une application XBAP) est de type FrameworkElement?

  2. Si j'ai un élément enfant, disons Cadre à l'intérieur d'une page. Je passe cet élément de cadre dans une fonction dans un autre assemblage. Maintenant, j'essaie de retourner à la page de la propriété Parent du contrôle Frame. Je ne suis pas capable d'obtenir une référence à la page? Des pensées?


La fonction que je me sers dans un autre assemblage pour la page parent du contrôle enfant

Page getTopParent(FrameworkElement f) 
{ 
    FrameworkElement ct = f; 

    while (true) 
    { 
     if (ct is Page) 
     { 
      break; 
     } 

     ct = (FrameworkElement) 
     ct.Parent; 
    } 
    return ct as Page; 
} 

Please find example XAML 

</DataTrigger> < /DataTemplate.Triggers> ->

 </TabControl.ItemTemplate> 
     <TabControl.ContentTemplate> 
      <DataTemplate> 
       <StackPanel HorizontalAlignment="Left"> 
        <Frame Name="tabContent" Height="520" Width="820" local:WebBrowserBehavior.Source="{Binding Path=CurrentPage}" ContentRendered="tabItem_contentRendered"/> 
       </StackPanel> 
      </DataTemplate> 
     </TabControl.ContentTemplate> 
    </TabControl> 
    <StackPanel Orientation="Horizontal" Name="taskBar" Height="34" VerticalAlignment="Bottom"> 
     <Button Height="23" Name="helpButton" Width="43" Content="Help" Click="helpButton_Click"/> 
    </StackPanel> 
</StackPanel> 

Répondre

0
  1. Oui, comme tout le reste en XAML. Allez here pour la documentation officielle.
1
  1. Oui, Page hérite de FrameworkElement.
  2. Parfois, monter dans l'arborescence n'est pas aussi simple que de simplement vérifier le parent, surtout si vous utilisez des modèles. Si vous utilisez des modèles, vous devez remonter l'arborescence en utilisant la propriété Parent jusqu'à ce qu'elle soit nulle. Ensuite, utilisez la propriété TemplatedParent. Vous pouvez remonter l'arbre logique en utilisant une combinaison des deux. Cela dit, WPF fournit des méthodes auxiliaires pour ce scénario. Découvrez LogicalTreeHelper.GetParent.
+0

Merci pour la réponse. Page getTopParent (FrameworkElement f) {FrameworkElement ct = f; while (true) { si (ct est Page) { rupture; } ct = (FrameworkElement) ct.Parent; } renvoyer ct comme Page; } –

+0

Merci, eh bien je viens de vérifier et je pense que ce n'est pas grave si je le passe dans le même assemblage ou un autre. Oui, mon élément Page contient des modèles de contrôle et de données? Est-il possible que je puisse obtenir la page parente même si j'ai des modèles dans ma page. –