我正在努力提高ListView
。这主要与ListViewItem
类中的更改有关。所以我继承了两者,创造了两个服装控件:
NestedListView : ListView
NestedListViewItem : ListViewItem
问题是,现在我希望NestedListView
的{{1}}提供<ItemsPresenter/>
而不是常规NestedListViewItem
。
我该如何实现这一目标?
(我几乎不知道 ListViewItems
如何运作。所以对该领域的任何解释都会有所帮助。)
答案 0 :(得分:3)
覆盖GetContainerForItemOverride
方法并返回所需的项目容器类型:
public class NestedListView : ListView
{
protected override DependencyObject GetContainerForItemOverride()
{
return new NestedListViewItem();
}
protected override bool IsItemItsOwnContainerOverride(object item)
{
return item is NestedListViewItem;
}
}
答案 1 :(得分:0)
请注意,如果您希望所有后代都属于被覆盖的 TreeViewItem 子类,那么接受的答案对于 TreeView 来说是不够的。
这是完整的解决方案:
public class TreeViewItemEx : TreeViewItem
{
protected override DependencyObject GetContainerForItemOverride()
{
return new TreeViewItemEx (); // Required to preserve the item type in all the hierarchy
}
protected override bool IsItemItsOwnContainerOverride(object item)
{
return item is TreeViewItemEx ;
}
}
public class TreeViewEx : TreeView
{
protected override DependencyObject GetContainerForItemOverride()
{
return new TreeViewItemEx();
}
protected override bool IsItemItsOwnContainerOverride(object item)
{
return item is TreeViewItemEx;
}
}