首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建自定义ListViewItem (子类ListViewItem)

创建自定义ListViewItem (子类ListViewItem)
EN

Stack Overflow用户
提问于 2014-05-22 09:56:10
回答 1查看 1.1K关注 0票数 1

我从ListViewItem派生了一个类,它具有一些自定义依赖项属性:

代码语言:javascript
复制
public class CustomListViewItem : ListViewItem
{
    public static DependencyProperty CustomDependencyProperty;
    ...
}

这个类也有一个ControlTemplate。

代码语言:javascript
复制
<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。但当我试图做这样的事情时:

代码语言:javascript
复制
<ListView.ItemContainerStyle>
    <Style TargetType="{x:Type local:CustomListViewItem}">
        ...            
    </Style>
</ListView.ItemContainerStyle>

编译器说:“用于类型'CustomItem‘的样式不能应用于’ListViewItem‘类型”。

我知道我可以使用ControlTemplate和ListViewItem TargetType来自定义ItemContainerStyle或DataTemplate来定制ItemTemplate,但是如何将ListViewItem子类替换为自己的项目类型呢?

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-22 13:11:36

我在考虑了this question之后找到了答案。核心思想是,不仅需要创建自定义ListViewItem,还需要为其创建自定义ListView和重写GetContainerForItemOverride()方法:

代码语言:javascript
复制
public class CustomListView : ListView
{
    static CustomListView()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomListView), new FrameworkPropertyMetadata(typeof(CustomListView)));
    }

    protected override DependencyObject GetContainerForItemOverride()
    {
        return new CustomListViewItem();
    }
}

当然,为一个ControlTemplate提供一个合适的CustomListView也是必要的。此外,PrepareContainerForItemOverride方法将是有用的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23803472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档