开发者

HierarchicalDataTemplate Reference TreeViewItem from Converter

I have the need to adjust the margin of my treeviewitems according to the height of the parent treeviewitem. I tried to add a converter to the stackpanel in the hierarchicaldatatemplate but it doesn't开发者_如何学运维 give me any way to accessing the treeviewitem in the converter convertTo method.

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

Is there any way of passing the treeView instance as a converterParameter into the convertTo method so I can find the treeviewitems by name from within the converter method?

Thanks


I don't know of a good way to put the TreeView instance as a ConverterParameter (Googling ConverterParameter yields some interesting ideas on how to achieve this...), but I think your approach is wrong - instead of passing the entire tree view to the converter and then find TreeViewItems by name, why not pass the TreeViewItem to the Margin binding with a converter that will search the visual tree and find the required height?

This can be done like this:

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

Now, your converter's value parameter will be the current TreeViewItem. From this value, you can get the TreeView instance or, even better, the parent TreeViewItem (if such exist) using the VisualTreeHelper.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜