我完全被這3個術語所困惑,何時使用哪個?什麼是關係,他們是哪些孩子的控制?ItemsControl,ItemsPanel和ItemsPresenter(Silverlight,XAML)
它是正確的說這是樹:
的ItemsControl> ItemsPresenter> ItemsPanel
我完全被這3個術語所困惑,何時使用哪個?什麼是關係,他們是哪些孩子的控制?ItemsControl,ItemsPanel和ItemsPresenter(Silverlight,XAML)
它是正確的說這是樹:
的ItemsControl> ItemsPresenter> ItemsPanel
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。
這一切都有意義嗎?
我認爲這幾乎說明了如何將事情都是由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>
如果你能給的所有正在使用的3例子..將是巨大的。我之前遇到的msdn示例並不是那麼好(即它血腥吮吸)所以我認爲itemspresenter正在移動ControlTemplate,它可以包含一個ItemsPanel,用於在ControlTemplate中包含更多項目? – bcm 2010-09-17 00:07:52
這是一個概念性問題,或者您嘗試創建自己的ItemsControl時遇到問題? – Mark 2010-09-17 02:17:00
概念,但只是想了解它。 – bcm 2010-09-17 06:25:02