2010-12-11 73 views
0

J'ai le besoin d'ajuster la marge de mes treeviewitems en fonction de la hauteur de l'arbre treeviewitem. J'ai essayé d'ajouter un convertisseur à la stackpanel dans le modèle hiérarchique, mais cela ne me donne aucun moyen d'accéder à treeview dans la méthode convertTo du convertisseur.HierarchicalDataTemplate Référence TreeViewItem de Converter

<UserControl.Resources> 

    <converter:LocationConverter x:Name="LocationConverter1" x:Key="LocationConverter1" /> 

    <sdk:HierarchicalDataTemplate x:Key="DataTemplate1" ItemsSource="{Binding SubCategory}"> 

      <StackPanel Margin="{Binding Converter={StaticResource LocationConverter1}}"> 

       <TextBlock Text="{Binding Name}" /> 

      </StackPanel> 

     </sdk:HierarchicalDataTemplate> 

    </UserControl.Resources> 

<Grid x:Name="LayoutRoot"> 
    <custom:TreeViewExtended x:Name="TopicsTreeView" 
          HorizontalAlignment="Left" 
          VerticalAlignment="Top" 
          ItemTemplate="{StaticResource DataTemplate1}"/> 

    <Button Content="Add" Click="Button_Click" Margin="200"></Button> 



</Grid> 

Est-il possible de passer l'instance treeView comme ConverterParameter dans la méthode convertTo je peux trouver les treeviewitems par nom dans la méthode de conversion?

Merci

Répondre

0

Je ne sais pas d'un bon moyen de mettre l'instance TreeView comme ConverterParameter (Googling ConverterParameter rendements someinterestingideas sur la façon de achieve this ...), mais je pense que votre approche est erronée - à la place de passer la vue entière de l'arbre au convertisseur, puis de trouver TreeViewItems par nom, pourquoi ne pas passer le TreeViewItem à la liaison Margin avec un convertisseur qui va chercher l'arbre visuel et trouver la hauteur requise?

Cela peut se faire comme ceci:

<StackPanel Margin="{Binding RelativeSource={RelativeSource FindAncestor, 
                  AncestorType=TreeViewItem}, 
          Converter={StaticResource LocationConverter1}}"> 

Maintenant, le paramètre de la valeur de votre convertisseur sera le courant TreeViewItem. À partir de cette valeur, vous pouvez obtenir l'instance TreeView ou, mieux encore, le TreeViewItem parent (s'il existe) en utilisant le VisualTreeHelper.