如何在XAML TreeView HierarchicalDataTemplate中垂直对齐项目符号?

时间:2010-06-02 12:15:38

标签: wpf silverlight xaml treeview hierarchicaldatatemplate

当TreeView中的节点有多行时,TreeView子弹会垂直居中。

如何使TreeView项目符号顶部对齐?

alt text http://www.deviantsart.com/upload/1uh2k8p.png

<pages:BasePage.Resources>
    <data:HierarchicalDataTemplate x:Key="OutlineTemplate"
        ItemsSource="{Binding OutlineDocumentObjects}">
        <TextBlock Text="{Binding Line}" 
            TextWrapping="Wrap" 
            VerticalAlignment="Top"
            Width="600"/>
    </data:HierarchicalDataTemplate>
</pages:BasePage.Resources>

<StackPanel Style="{StaticResource StackPanelPageWrapperStyle}">
    <tk:TreeView x:Name="TheTreeView" 
        ItemsSource="{Binding TheOutline.OutlineDocumentObjects}"
        ItemTemplate="{StaticResource OutlineTemplate}">
    </tk:TreeView>
</StackPanel>

1 个答案:

答案 0 :(得分:2)

好问题......当然,可以通过重新定义模板来完成,但这很痛苦......(如果你想这样做,用StyleSnooper或ShowMeTheTemplate提取模板并更改{{1} } VerticalAlignment

另一种方法是继承ToggleButton并覆盖TreeViewItem方法。由于OnApply在默认模板中有一个名称(“Expander”),您可以找到它并应用您想要的ToggleButton

VerticalAlignment

public class TopAlignedTreeViewItem : TreeViewItem { public override void OnApplyTemplate() { base.OnApplyTemplate(); if (Template != null) { ToggleButton btn = Template.FindName("Expander", this) as ToggleButton; if (btn != null) { btn.VerticalAlignment = VerticalAlignment.Top; } } } } 生成TreeView而不是TopAlignedTreeViewItem,您还需要制作自己的TreeViewItem

TreeView