0

我需要根据父树视图项的高度调整树视图项的边距。我试图在分层数据模板中的堆栈面板中添加一个转换器,但它没有给我任何方法来访问转换器 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 方法,以便我可以从转换器方法中按名称找到 treeviewitems?

谢谢

4

1 回答 1

0

我不知道将 TreeView 实例作为 ConverterParameter 的好方法(谷歌搜索 ConverterParameter会产生一些 关于如何实现这一点的有趣 想法......),但我认为你的方法是错误的 - 而不是将整个树视图传递给转换器,然后按名称查找 TreeViewItems,为什么不使用转换器将 TreeViewItem 传递给 Margin 绑定,该转换器将搜索可视化树并找到所需的高度?

这可以这样做:

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

现在,您的转换器的 value 参数将是当前的TreeViewItem从这个值,您可以使用VisualTreeHelper获取 TreeView 实例,或者甚至更好的是父 TreeViewItem(如果存在)。

于 2011-01-30T17:09:28.987 回答