我为ListView控件创建自定义视图。
public class CustomView: View{
//...
public DataTemplate ItemTemplate { get; set; }
//...
}
<CustomView x:Key="Custom">
<CustomView.ItemTemplate>
<DataTemplate>
</DataTemplate>
</CustomView.ItemTemplate>
</CustomView>
在ListViewItem
的样式中,我想在DataTemplate
上CustomView.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;)
答案 0 :(得分:0)
公共类CustomListView:ListView {
static CustomListView()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomListView),new FrameworkPropertyMetadata(typeof运算(CustomListView)));
}
protected override DependencyObject GetContainerForItemOverride()
{
return new CustomListViewItem();
}
}