2014-05-22 47 views
1

我派生的類從ListViewItem的,它有一些自定義的依賴屬性:創建自定義的ListViewItem(子類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中使用此CustomListViewItem而不是ListViewItem。但是,當我嘗試做一些事情,如:

<ListView.ItemContainerStyle> 
    <Style TargetType="{x:Type local:CustomListViewItem}"> 
     ...    
    </Style> 
</ListView.ItemContainerStyle> 

編譯器說:「供型‘定製項目’樣式不能應用於鍵入「ListViewItem的」。

我知道我可以使用ControlTemplate和ListViewItem TargetType來自定義ItemContainerStyle或DataTemplate來自定義ItemTemplate,但是如何繼承ListViewItem來代替我自己的Item類型呢?

任何幫助將不勝感激。

+0

爲什麼你需要自定義listview項目..有可能是一些其他方式來實現你正在嘗試做什麼 – Nitin

回答

2

我在考慮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方法將是有用的。