Джулиан,
это действительно хороший вопрос. Почему бы вам не попробовать написать свой собственный элемент древовидного представления? :) Я имею в виду, что не с нуля, просто унаследуйте от существующего TreeViewItem и добавьте свое свойство. Я подготовил небольшой образец, но не стесняйтесь изменять его по своему усмотрению (и задавайте вопросы, если что-то не совсем понятно). вот так:
public class TreeViewItem_CustomControl : TreeViewItem
{
static TreeViewItem_CustomControl()
{
HasChildrenProperty = DependencyProperty.Register("HasChildren", typeof(Boolean), typeof(TreeViewItem_CustomControl));
}
static DependencyProperty HasChildrenProperty;
public Boolean HasChildren
{
get
{
return (Boolean)base.GetValue(HasChildrenProperty);
}
set
{
if (value)
{
if (this.Items != null)
{
this.Items.Add(String.Empty); //Dummy item
}
}
else
{
if (this.Items != null)
{
this.Items.Clear();
}
}
base.SetValue(HasChildrenProperty, value);
}
}
}
Это был код для вашего пользовательского TreeViewItem. Теперь воспользуемся этим в XAML:
<TreeView>
<TreeViewItem Header="qwer">
Regulat tree view item.
</TreeViewItem>
<CustomTree:TreeViewItem_CustomControl x:Name="xyz" Header="temp header" Height="50">
<TreeViewItem>Custom tree view item, which will be removed.</TreeViewItem>
</CustomTree:TreeViewItem_CustomControl>
</TreeView>
Как видите, первый элемент является обычным, а второй - вашим индивидуальным. Обратите внимание, что у него есть один ребенок. Затем вы можете привязать свойство HasChildren к некоторому логическому объекту в вашей ViewModel или просто протестировать мой собственный класс, установив для HasChildren значение False из кода, стоящего за указанным выше XAML:
xyz.HasChildren = false;
Теперь, несмотря на то, что у вашего элемента есть один дочерний элемент, кнопка «Развернуть» не отображается, поэтому это означает, что мой настраиваемый класс работает.
Надеюсь, я помог вам, но не стесняйтесь спрашивать, есть ли у вас вопросы.
Петр.
person
Piotr Justyna
schedule
21.04.2010