Добавление нового настраиваемого свойства к элементу WPFC#

Место общения программистов C#
Anonymous
Добавление нового настраиваемого свойства к элементу WPF

Сообщение Anonymous »

Подобно тому, как заголовок является свойством TreeViewItem, я пытаюсь добавить еще одно свойство, на которое я могу ссылаться в своем коде.
Я начал изучать 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); }
}
Однако это по-прежнему делает TreeViewType недоступным или неработоспособным в приведенном выше примере, поэтому он не компилируется и не запускается.
Я также пытался сделать расширение с помощью просто:

Код: Выделить всё

   public class TreeViewItemExtension : TreeViewItem
{
public string TreeViewType { get; set; }

public TreeViewItemExtension ()
{

}
}
Но при просмотре вновь добавленных элементов TreeViewType отсутствует. Я пробовал приводить и переименовывать различные TreeViewItems в 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;
}
Это просто возвращает пустую строку, однако с помощью приведенного ниже кода я могу подтвердить, что newChild имеет свойство TreeViewType и это TestChild, прежде чем записывать его в дерево.
р>

Код: Выделить всё

        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

Вернуться в «C#»