从自定义视图设置ListViewItem的ContentTemplate

时间:2014-06-03 14:02:16

标签: wpf xaml listview data-binding view

我为ListView控件创建自定义视图。

public class CustomView: View{
//...
        public DataTemplate ItemTemplate { get; set; }
//...
}


<CustomView x:Key="Custom">
    <CustomView.ItemTemplate>
        <DataTemplate>
        </DataTemplate>
    </CustomView.ItemTemplate>
</CustomView>

ListViewItem的样式中,我想在DataTemplateCustomView.ItemTemplate绑定ContentTemplate

<Style x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type CustomView}, ResourceId=CustomViewItem}"
       TargetType="{x:Type ListViewItem}"
       BasedOn="{StaticResource {x:Type ListBoxItem}}">

    <Setter Property="ContentTemplate"
            Value="{Binding Path=View.ItemTemplate, 
                                RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}}" />

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListBoxItem}">
                <Border x:Name="ItemBorder">
                    <ContentPresenter />
                </Border>
        </Setter.Value>
    </Setter>
</Style>


<Style x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type CustomView}, ResourceId=CustomView}"
       TargetType="{x:Type ListView}"
       BasedOn="{StaticResource {x:Type ListBox}}">

</Style>

查看有效但在VS的输出窗口中我收到此错误:

  

无法找到与引用&#39; RelativeSource绑定的源代码   FindAncestor,AncestorType =&#39; System.Windows.Controls.ListView&#39;,   AncestorLevel =&#39; 1&#39;&#39 ;. BindingExpression:路径= View.ItemTemplate;   的DataItem = NULL;目标元素是&#39; ListViewItem&#39; (名称=&#39;&#39);目标   属性是&#39; ContentTemplate&#39; (键入&#39; DataTemplate&#39;)

1 个答案:

答案 0 :(得分:0)

公共类CustomListView:ListView {

static CustomListView()


{

DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomListView),new FrameworkPropertyMetadata(typeof运算(CustomListView)));

}

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

}