2010-12-11 74 views
0

我有需要根据父treeviewitem的高度调整我的treeviewitems的边距。我试图添加一个转换器到hierarchicaldatatemplate中的堆栈面板,但它没有给我任何方式访问转换器convertTo方法中的treeviewitem。HierarchicalDataTemplate参考TreeViewItem从转换器

<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> 

有没有经过TreeView控件实例作为converterParameter到的ConvertTo方法,所以我可以从转换方法中找到名称treeviewitems的方法吗?

感谢

回答

0

我不知道的一个很好的办法把TreeView控件实例作为ConverterParameter(Googling ConverterParameter产量someinterestingideas如何achieve this ...),但我认为你的做法是错误的 - 而不是将整个树视图传递给转换器,然后通过名称查找TreeViewItems,为什么不将TreeViewItem传递给Margin绑定,而转换器将搜索可视化树并找到所需的高度?

这是可以做到这样的:现在

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

,你的转换器的值参数将是当前树型视图。从这个值开始,你可以使用VisualTreeHelper来获得TreeView实例,或者甚至更好的父TreeViewItem(如果存在的话)。