我从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>
现在我想在ListView而不是ListViewItem中使用这个CustomListViewItem。但是,当我尝试做类似的事情时:
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type local:CustomListViewItem}">
...
</Style>
</ListView.ItemContainerStyle>
编译器说:“用于'CustomItem'类型的样式不能应用于'ListViewItem'类型。
我知道我可以使用ControlTemplate和ListViewItem TargetType来自定义ItemContainerStyle或DataTemplate以自定义ItemTemplate,但是我如何将ListViewItem子类化为替换我自己的Item类型?
任何帮助将不胜感激。
答案 0 :(得分:3)
我在考虑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();
}
}
当然,为CustomListView提供合适的ControlTemplate也是必要的。
此外,PrepareContainerForItemOverride
方法也很有用。