Я начал изучать DependencyProperty, но у меня есть ощущение, что это неправильное направление, а также создание простого расширения, чтобы попытаться установить свойство, которое я ищу.
Небольшой фрагмент, который я пытаюсь заставить работать, выглядит примерно так:
Код: Выделить всё
public bool AddNewTreeviewChild(ItemCollection selectedTreeView, TreeViewItem selectedItem)
{
if (selectedTreeView.Contains(selectedItem))
{
var newChild = new TreeViewItemExtension();
newChild.Header = NewItem.Text;
newChild.TreeViewType = DesignateChildType();
selectedItem.Items.Add(newChild);
}
foreach (TreeViewItem item in selectedTreeView)
{
if (AddNewTreeviewChild(item.Items, selectedItem))
{
return true;
}
}
return false;
}
Код: Выделить всё
public static readonly DependencyProperty TreeViewTypeProp =
DependencyProperty.Register(
"TreeViewType",
typeof(string),
typeof(TreeViewItem),
new PropertyMetadata("Root")
);
public string TreeViewType
{
get { return (string)GetValue(TreeViewTypeProp); }
set { SetValue(TreeViewTypeProp, value); }
}
Я также пытался сделать расширение с помощью просто:
Код: Выделить всё
public class TreeViewItemExtension : TreeViewItem
{
public string TreeViewType { get; set; }
public TreeViewItemExtension ()
{
}
}
Изменить: при реализации решения BigBoss, представленного ниже, возникла новая проблема. Пока я тестирую эти вещи, у меня есть функция для возврата информации об элементах/родителях TreeView. Раздел ниже, похоже, не возвращает прикрепленное свойство
Код: Выделить всё
public string GetTreeviewParent(TreeViewItem item)
{
DependencyObject parent = VisualTreeHelper.GetParent(item);
string parentPath = ">";
while (!(parent is TreeView))
{
parent = VisualTreeHelper.GetParent(parent);
if (parent != null)
{
ItemsControl parentItem = parent as ItemsControl;
TreeViewItem parentName = parentItem as TreeViewItem;
if (parentName != null)
{
parentPath = ">" + parentName.Header.ToString() + parentPath;
MessageBox.Show(TreeViewType.GetTreeViewType(parent));
}
}
}
return parentPath;
}
р>
Код: Выделить всё
var newChild = new TreeViewItem();
newChild.Header = NewItem.Text;
TreeViewType.SetTreeViewType(newChild, "TestChild");
MessageBox.Show(TreeViewType.GetTreeViewType(newChild));
selectedItem.Items.Add(newChild);
Подробнее здесь: https://stackoverflow.com/questions/790 ... pf-element