2010-12-11 3 views
0

У меня есть необходимость корректировать поле моих древовидных объектов в соответствии с высотой родительского treeviewitem. Я попытался добавить конвертер в стекую панель в файле hierarchicaldatatemplate, но он не дает мне никакого способа получить доступ к древовидному элементу в конвертируемом методе convertTo.HierarchicalDataTemplate Reference TreeViewItem from 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> 

Есть ли способ передачи экземпляра 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}}"> 

Теперь значение параметра вашего преобразователя будет текущий TreeViewItem. Из этого значения вы можете получить экземпляр TreeView или, что еще лучше, родительский TreeViewItem (если таковой существует) с помощью VisualTreeHelper.

Смежные вопросы