HierarchicalDataTemplate Ссылка TreeViewItem из конвертера - PullRequest
0 голосов
/ 11 декабря 2010

Мне нужно отрегулировать поля моих древовидных элементов в соответствии с высотой родительского древовидного элемента. Я попытался добавить конвертер в панель стека в иерархической таблице данных, но он не дает мне никакого доступа к дереву в методе convertTo конвертера.

    <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, чтобы я мог найти элементы дерева по имени из метода преобразователя?

Спасибо

1 Ответ

0 голосов
/ 30 января 2011

Я не знаю, как можно поместить экземпляр TreeView в качестве параметра ConverterParameter ( Поиск в гугле-преобразователе дает некоторые интересные идеи о том, как достичь этого ...), но я думаю, что ваш подход неправильный - вместо того, чтобы передавать весь древовидный вид преобразователю и затем находить TreeViewItems по имени, почему бы не передать TreeViewItem в Margin привязка с конвертером, который будет искать визуальное дерево и найти необходимую высоту?

Это можно сделать так:

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

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

...