我需要根据父树视图的高度调整我的treeviewitems的边距。我试图在hierarchicaldatatemplate中添加一个转换器到stackpanel,但它没有给我任何方法来访问转换器convertTo方法中的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 :(得分:0)
我不知道将TreeView实例作为ConverterParameter放置的好方法(Googling ConverterParameter会产生some interesting ideas如何achieve this ...),但我认为你的方法是错误的 - 而不是将整个树视图传递给转换器,然后按名称查找TreeViewItems,为什么不将TreeViewItem传递给Margin绑定,转换器将搜索可视化树并查找所需的高度?
这可以这样做:
<StackPanel Margin="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType=TreeViewItem},
Converter={StaticResource LocationConverter1}}">
现在,您的转换器的value参数将是当前的 TreeViewItem 。通过此值,您可以使用VisualTreeHelper获取TreeView实例,或者甚至更好地获取父TreeViewItem(如果存在)。