继承自 itemsControl - 如何更改项目的类型?
Inherited from an itemsControl - How to change the type of the items?
我正在努力改进 ListView
。这主要与 ListViewItem
class 中的更改有关。所以我继承了两者,创建了两个服装控件:
NestedListView : ListView
NestedListViewItem : ListViewItem
问题是现在我想要 NestedListView
的 <ItemsPresenter/>
显示 NestedListViewItem
而不是常规的 ListViewItems
。
我如何实现这一目标?
(我几乎不知道 <ItemsPresenter/>
是如何工作的。所以关于该领域的任何解释都可能有所帮助。
覆盖 GetContainerForItemOverride
方法和 return 您想要的项目容器类型:
public class NestedListView : ListView
{
protected override DependencyObject GetContainerForItemOverride()
{
return new NestedListViewItem();
}
protected override bool IsItemItsOwnContainerOverride(object item)
{
return item is NestedListViewItem;
}
}
注意,如果您希望所有后代都属于覆盖的 TreeViewItem 子class。
,则接受的答案对于 TreeView 是不够的
完整的解决方案如下:
- 覆盖 TreeViewItem class
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 ;
}
}
- 覆盖 TreeView class
public class TreeViewEx : TreeView
{
protected override DependencyObject GetContainerForItemOverride()
{
return new TreeViewItemEx();
}
protected override bool IsItemItsOwnContainerOverride(object item)
{
return item is TreeViewItemEx;
}
}
我正在努力改进 ListView
。这主要与 ListViewItem
class 中的更改有关。所以我继承了两者,创建了两个服装控件:
NestedListView : ListView
NestedListViewItem : ListViewItem
问题是现在我想要 NestedListView
的 <ItemsPresenter/>
显示 NestedListViewItem
而不是常规的 ListViewItems
。
我如何实现这一目标?
(我几乎不知道 <ItemsPresenter/>
是如何工作的。所以关于该领域的任何解释都可能有所帮助。
覆盖 GetContainerForItemOverride
方法和 return 您想要的项目容器类型:
public class NestedListView : ListView
{
protected override DependencyObject GetContainerForItemOverride()
{
return new NestedListViewItem();
}
protected override bool IsItemItsOwnContainerOverride(object item)
{
return item is NestedListViewItem;
}
}
注意,如果您希望所有后代都属于覆盖的 TreeViewItem 子class。
,则接受的答案对于 TreeView 是不够的完整的解决方案如下:
- 覆盖 TreeViewItem class
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 ;
}
}
- 覆盖 TreeView class
public class TreeViewEx : TreeView
{
protected override DependencyObject GetContainerForItemOverride()
{
return new TreeViewItemEx();
}
protected override bool IsItemItsOwnContainerOverride(object item)
{
return item is TreeViewItemEx;
}
}