2010-10-08 106 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