Хороший вопрос ... конечно, это можно сделать, переопределив шаблон, но это неприятно ... (если вы хотите пойти по этому пути, извлеките шаблон с помощью StyleSnooper или ShowMeTheTemplate и измените VerticalAlignment
из ToggleButton
)
Другим способом является наследование 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
с, вам также необходимо создать собственный TreeView
:
public class TopAlignedTreeView : TreeView
{
protected override bool IsItemItsOwnContainerOverride(object item)
{
return (item is TopAlignedTreeViewItem);
}
protected override System.Windows.DependencyObject GetContainerForItemOverride()
{
return new TopAlignedTreeViewItem();
}
}