bcm*_*bcm 20 silverlight xaml itemscontrol itemspanel itemspresenter
我对这3个术语完全感到困惑,何时使用哪个?什么是关系,他们是谁控制的孩子?
说这是树是否正确:
ItemsControl> ItemsPresenter> ItemsPanel
Mar*_*ark 35
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>
Run Code Online (Sandbox Code Playgroud)
该ItemsPanel是控制你的ItemsControl项目的布局面板(或容器).因此,如果您希望已添加到ItemsControl的项目以水平方式显示,那么yor items面板可能只是一个StackPanel,其Orientation属性设置为Horizontal.
这一切都有意义吗?
我认为这几乎解释了Silverlight是如何完成的:ItemsPanelTemplate类: 指定ItemsPresenter为ItemsControl的项目布局创建的面板. ItemsPanelTemplate类
<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 />
....
Run Code Online (Sandbox Code Playgroud)
基本上,ItemPresenter(在模板中指定)将替换为ItemsPanelTemplate中指定的任何内容.
因此,模板可以扩展为包含标题,所有子项都将放在此标题下:
<Grid> <TextBlock Text="Header"/> <ItemsPresenter /> </Grid>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23208 次 |
| 最近记录: |