1

我正在努力改进ListView。这主要与ListViewItem课堂上的变化有关。所以我继承了两者,创建了两个服装控件:

NestedListView : ListView 
NestedListViewItem : ListViewItem

问题是现在我希望NestedListView's<ItemsPresenter/>呈现NestedListViewItems 而不是常规的ListViewItems。我如何实现这一目标?

(我几乎不知道是如何 <ItemsPresenter/>工作的。所以关于该领域的任何解释都可能会有所帮助)。

4

2 回答 2

4

覆盖该GetContainerForItemOverride方法并返回您想要的项目容器的类型:

public class NestedListView : ListView
{
    protected override DependencyObject GetContainerForItemOverride()
    {
        return new NestedListViewItem();
    }

    protected override bool IsItemItsOwnContainerOverride(object item)
    {
        return item is NestedListViewItem;
    }
}
于 2018-02-02T17:50:19.877 回答
0

请注意,如果您希望所有后代都属于覆盖的 TreeViewItem 子类,则接受的答案对于 TreeView 是不够的。

这是完整的解决方案:

  1. 覆盖 TreeViewItem 类
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 ;
    }
}
  1. 覆盖 TreeView 类
public class TreeViewEx : TreeView 
{
    protected override DependencyObject GetContainerForItemOverride()
    {
        return new TreeViewItemEx();
    }

    protected override bool IsItemItsOwnContainerOverride(object item)
    {
        return item is TreeViewItemEx;
    }
}
于 2021-01-31T20:45:23.777 回答