この機能は組み込まれていないため、これを実現するには、から派生した新しいコントロールを作成してからTreeView
拡張する必要がありTreeViewItem
ます。
これを達成するにはかなりの作業が必要ですので、ぜひフォローしてください。すべてを説明するわけではありませんので、質問するか、わからないことがあれば MSDN を読んでください。
ツリービューの作成
public class TreeViewEx : TreeView
{
protected override bool IsItemItsOwnContainerOverride(object item)
{
return (item is TreeViewItemEx);
}
protected override DependencyObject GetContainerForItemOverride()
{
return new TreeViewItemEx(this);
}
internal bool PreviewExpandTreeViewItem(TreeViewItemEx item)
{
// return true to allow expansion, false to cancel
return true;
}
}
public class TreeViewItemEx : TreeViewItem
{
private readonly TreeViewEx Owner;
static TreeViewItemEx()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(TreeViewItemEx),
new FrameworkPropertyMetadata(typeof(TreeViewItemEx)));
}
public TreeViewItemEx(TreeViewEx owner)
{
Owner = owner;
}
private void OnPreviewExpansionMouseDown(object sender, MouseButtonEventArgs e)
{
// we do not care if it already expanded
if (IsExpanded)
return;
e.Cancel = !Owner.PreviewExpandTreeViewItem(this);
}
}
ここで、新しい のデフォルト スタイルを作成しますTreeViewItemEx
。基本テンプレートは MSDN にあります。
これを行うには、MSDN からベース テンプレートをコピーし、 を に変更してTargetType
から、名前付きにイベントを{x:Type controls:TreeViewItemEx}
追加し、アイテム クラスでイベント ハンドラーを使用する必要があります。PreviewMouseDown
ToggleButton
Expander
PreviewMouseDown="OnPreviewExpansionMouseDown"
注:これにより、ユーザーが展開ボタン [+] をクリックすることによってトリガーされた展開イベントのみをインターセプトできます。自分でサポートを実装するために必要なキーボード ショートカットがいくつかあります。
HTH、