2010-12-11 41 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(如果存在的話)。