Silverlight 3でTreeViewがサポートされました。デフォルトでは参照されないため、System.Windows.Controls.dllを参照に追加する必要があります。
ItemsにはTreeViewItem以外も入れられますが、子ノードをぶら下げられるのはTreeViewItemだけです。以下は親ノードTreeViewItemに子ノードintをぶら下げる例です。
var treeView1 = new TreeView(); var root = new TreeViewItem { Header = "root" }; for (int i = 1; i <= 5; i++) root.Items.Add(i); treeView1.Items.Add(root);
以下はMouseLeftButtonUpの間隔からダブルクリックを検出して、VisualTreeHelper.FindElementsInHostCoordinates()で該当するTreeViewItemを取得する例です。 ⇒ 動作確認とソース
TreeViewItem lastClickItem = null; var lastClickTime = DateTime.Now.AddSeconds(-1); treeView1.MouseLeftButtonUp += (sender, e) => { var it = (from item in VisualTreeHelper.FindElementsInHostCoordinates( e.GetPosition(null), treeView1) where item is TreeViewItem select item as TreeViewItem).GetEnumerator(); var now = DateTime.Now; if (!it.MoveNext()) lastClickItem = null; else { if (it.Current == lastClickItem && (now - lastClickTime).TotalMilliseconds < 500) MessageBox.Show("double click: " + it.Current.Header); lastClickItem = it.Current; } lastClickTime = now; };
intで追加したノードにも自動的にTreeViewItemが割り当てられています。