- 새로운 WPF 응용 프로그램을 만들
- 이 MainWindow를에서 "트리 1"이라는 트 리뷰를 넣어
- 복사 - 붙여 넣기 작업을 기본적으로
에 그것을보고 다음 코드를, 당신은 필요 TreeViewItem
을 상속 받고 어느 노드에 어떤 핸들러가 추가되는지 추적하는 메커니즘을 구축하십시오 : 불행히도 event
에는 등록 된 핸들러에 대한 정보가 없습니다.
노드가 제대로 작동하려면 새 상속에만 독점적으로 의존해야합니다. 즉, TreeViewItem
을 더 이상 참조하지 말고 TreeNode
을 참조해야합니다 (사용자 정의 클래스에 대해 선택한 이름이므로 자유롭게 변경할 수 있음).
약속 코드는 트리에 "rootNode"노드를 추가하는 것입니다.이 노드는 확장시 형제 노드를 만듭니다.이 형제 노드는 동일한 처리기가 자체로 가져온 것입니다. 확장시 등).
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
TreeNode root = new TreeNode();
root.Header = "root";
tree1.Items.Clear();
// add node to tree before adding handlers, or you'll get
// a StackOverflowException
tree1.Items.Add(root);
root.AddHandler(TreeNode.ExpandedEvent, new RoutedEventHandler(expandedHandler));
}
private void expandedHandler(object sender, RoutedEventArgs e) { newNodeCopyExpandedHandlers(sender as TreeNode); }
private void newNodeCopyExpandedHandlers(TreeNode node)
{
TreeNode newNode = new TreeNode();
newNode.Header = "nuovo!";
// add node to tree before adding handlers, or you'll get
// a StackOverflowException
tree1.Items.Add(newNode);
foreach (Delegate d in newNode.GetHandlers(node, TreeNode.ExpandedEvent))
newNode.AddHandler(TreeNode.ExpandedEvent, d);
}
}
public class TreeNode : TreeViewItem
{
private Dictionary<RoutedEvent, List<Delegate>> handlersList = new Dictionary<RoutedEvent, List<Delegate>>();
public new void AddHandler(RoutedEvent e, Delegate d)
{
if (!handlersList.ContainsKey(e)) handlersList.Add(e, new List<Delegate>());
handlersList[e].Add(d);
base.AddHandler(e, d);
}
public new void RemoveHandler(RoutedEvent e, Delegate d)
{
if (!handlersList.ContainsKey(e)) handlersList.Add(e, new List<Delegate>());
if (handlersList[e].Contains(d)) handlersList[e].Remove(d);
base.RemoveHandler(e, d);
}
public List<Delegate> GetHandlers(TreeNode n, RoutedEvent e)
{
if (n.handlersList.ContainsKey(e)) return n.handlersList[e];
else return null;
}
}
}
나는 그것에 대해 질문을했지만. 그 방법은 어느 수업에 들어갈 수 있습니까? 확장 된 treeviewitem 클래스? 그렇다면 어떻게 할당 된 확장 처리기를 얻을 수 있습니까? – user589195