当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>
答案 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