ItemPresenter中的项目模板

时间:2010-10-08 07:39:57

标签: silverlight templates

在此模板中,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?

1 个答案:

答案 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}">