在此模板中,ItemPresenter只定义Items的主机面板。 是否可以定义ItemTemplate?
<ControlTemplate x:Key="ItemsControlTemplate" TargetType="ItemsControl">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<ScrollViewer>
<ItemsPresenter Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"/>
</ScrollViewer>
</Grid>
</ControlTemplate>
为了更进一步,我创建了一个类:
public class ItemsControlExtended : ItemsControl
{
public ItemsControlExtended()
{
DefaultStyleKey = typeof(ItemsControlExtended);
}
}
我想创建一个依赖属性“ItemsMargin”。 在我完成之后,我应该将Item“Margin”属性绑定到“ItemsMargin”。 如何实施?
GetContainerForItemOverride? PrepareContainerForItemOverride? OnApplyTemplate?
答案 0 :(得分:1)
您不能使用ControlTemplate
作为整体来定义ItemTemplate。
相反,您可以根据需要创建包含控件模板和其他模板的样式: -
<Style x:Key="ItemsControlStyle" TargetType="ItemsControl>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ItemsControl">
<!-- your template as above -->
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<!-- An alternative to StackPanel if so desired -->
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemTemplate">
<Setter.Value>
<DatalTemplate>
<!-- The item template you wanted -->
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
现在您可以设置ItemsControl的样式: -
<ItemsControl Style="{StaticResource ItemsControlStyle}">