3

TreeView のノードに複数の行がある場合、TreeView の箇条書きが垂直方向に中央揃えになります。

TreeView の箇条書きを上揃えにするにはどうすればよいですか?

代替テキスト 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>
4

1 に答える 1

2

良い質問... もちろん、テンプレートを再定義することで実行できますが、面倒です... (そのようにしたい場合は、StyleSnooper または ShowMeTheTemplate でテンプレートを抽出し、 の を変更しVerticalAlignmentますToggleButton)

もう 1 つの方法は、メソッドを継承TreeViewItemしてオーバーライドするOnApplyことです。にToggleButtonはデフォルトのテンプレートに名前 (「Expander」) があるため、それを見つけて、必要な を適用できます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生成するには、独自の も作成する必要があります。TopAlignedTreeViewItemTreeViewItemTreeView

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

    protected override System.Windows.DependencyObject GetContainerForItemOverride()
    {
        return new TopAlignedTreeViewItem();
    }
}
于 2010-06-02T12:43:18.237 に答える