2010-09-16 87 views

回答

32

ItemsControl在概念上,裏面的物品控制。試着簡單地將這種控制想象成零個或多個對象的持有者。

ItemsPresenter有點難以解釋,但這是ItemsControl模板的一部分,它將定義項目放置在其中的位置。你的ItemsControl的模板可以是任何你喜歡的東西,比如說一個帶有一些漂亮圖片的網格,在這個模板裏面,你可以把ItemsPresenter放在任何你想要物品的地方,比如在你的網格中間。 (本實施例中是從msdn抽取並簡化爲了便於閱讀)

<Style TargetType="HeaderedItemsControl"> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type HeaderedItemsControl}"> 
      <Grid> 
      <Rectangle Stroke="Black" Fill="Red"/> 
      <ItemsPresenter Margin="2,0,0,0"/> 
      </Grid> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 

ItemsPanel是控制在你的ItemsControl的項的佈局的面板(或容器)。因此,如果您希望已添加到ItemsControl中的項目以水平方式顯示,那麼yor項目面板可以簡單地爲其方向屬性設置爲「水平」的StackPanel。

這一切都有意義嗎?

+0

如果你能給的所有正在使用的3例子..將是巨大的。我之前遇到的msdn示例並不是那麼好(即它血腥吮吸)所以我認爲itemspresenter正在移動ControlTemplate,它可以包含一個ItemsPanel,用於在ControlTemplate中包含更多項目? – bcm 2010-09-17 00:07:52

+0

這是一個概念性問題,或者您嘗試創建自己的ItemsControl時遇到問題? – Mark 2010-09-17 02:17:00

+0

概念,但只是想了解它。 – bcm 2010-09-17 06:25:02

5

我認爲這幾乎說明了如何將事情都是由Silverlight的完成: ItemsPanelTemplate類: 指定ItemsPresenter創建一個ItemsControl的項目佈局的面板。 ItemsPanelTemplate Class

<Style TargetType="local:myItemsControl"> 
    <Setter Property="ItemsPanel"> 
     <Setter.Value> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="Vertical"/> 
      </ItemsPanelTemplate> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="local:myItemsControl"> 
       .... 
       <ItemsPresenter /> 
       .... 

基本上,ItemPresenter(在模板中指定)將與任何在ItemsPanelTemplate指定來替換。

因此,模板可以擴展到包括標題和所有的孩子將這個標題下放置:

<Grid> <TextBlock Text="Header"/> <ItemsPresenter /> </Grid>