2010-06-02 38 views
3

當我的TreeView中的一個節點有多行時,TreeView項目符號會垂直居中。如何垂直對齊XAML TreeView HierarchicalDataTemplate中的項目符號?

如何頂部對齊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> 

回答

2

好問題......當然,也可能是通過重新定義模板完成,但它是一個痛苦......(如果你想採用這種方式,提取與模板StyleSnooper或ShowMeTheTemplate和改變的ToggleButton

的另一種方式的VerticalAlignment是繼承TreeViewItem並重寫OnApply方法。由於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 S,還需要讓你自己TreeView

public class TopAlignedTreeView : TreeView 
{ 
    protected override bool IsItemItsOwnContainerOverride(object item) 
    { 
     return (item is TopAlignedTreeViewItem); 
    } 

    protected override System.Windows.DependencyObject GetContainerForItemOverride() 
    { 
     return new TopAlignedTreeViewItem(); 
    } 
} 
+0

我需要在我的代碼中引用使用Template.FindName? – 2010-06-02 12:50:04

+0

什麼都沒有,模板是當前實例的屬性(this.Template) – 2010-06-02 12:54:39

+0

我得到:'System.Windows.Controls.ControlTemplate'不包含'FindName'的定義,也沒有接受第一個擴展方法'FindName'的第一個可以找到'System.Windows.Controls.ControlTemplate'類型的參數(你是否缺少使用指令或程序集引用?) – 2010-06-02 13:00:31