我从ListViewItem派生了一个类,它具有一些自定义依赖项属性:
public class CustomListViewItem : ListViewItem
{
public static DependencyProperty CustomDependencyProperty;
...
}这个类也有一个ControlTemplate。
<Style TargetType="{x:Type local:CustomListViewItem}">
<Style.Setters>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:CustomListViewItem}">
...
</ControlTemplate>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>现在,我想在CustomListViewItem中使用这个ListView,而不是ListViewItem。但当我试图做这样的事情时:
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type local:CustomListViewItem}">
...
</Style>
</ListView.ItemContainerStyle>编译器说:“用于类型'CustomItem‘的样式不能应用于’ListViewItem‘类型”。
我知道我可以使用ControlTemplate和ListViewItem TargetType来自定义ItemContainerStyle或DataTemplate来定制ItemTemplate,但是如何将ListViewItem子类替换为自己的项目类型呢?
任何帮助都将不胜感激。
发布于 2014-05-22 13:11:36
我在考虑了this question之后找到了答案。核心思想是,不仅需要创建自定义ListViewItem,还需要为其创建自定义ListView和重写GetContainerForItemOverride()方法:
public class CustomListView : ListView
{
static CustomListView()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomListView), new FrameworkPropertyMetadata(typeof(CustomListView)));
}
protected override DependencyObject GetContainerForItemOverride()
{
return new CustomListViewItem();
}
}当然,为一个ControlTemplate提供一个合适的CustomListView也是必要的。此外,PrepareContainerForItemOverride方法将是有用的。
https://stackoverflow.com/questions/23803472
复制相似问题