2010-10-08 100 views
0

在此模板中,ItemPresenter只是为项目定义主机面板。 是否可以定义ItemTemplate?ItemPresenter中的项目模板

<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

作为一个整体,您无法从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}"> 
+0

谢谢你,非常有帮助 – Dmitry 2010-10-08 10:03:45