代码之家  ›  专栏  ›  技术社区  ›  null

项模板:列表框与项控件

  •  5
  • null  · 技术社区  · 15 年前

    我对WPF世界还比较陌生,我对在一个 项目控制 . 我需要的是在一个 项目控制 (或诸如此类)。

    如果我使用以下XAML代码…

    <ItemsControl>
        <ItemsControl.ItemTemplate>
            <DataTemplate DataType="{x:Type Button}">
                    <Border BorderBrush="AliceBlue" 
                            BorderThickness="3">
                        <TextBlock Text="Templated!"/>        
                    </Border>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
        <Button>Not templated</Button>
        <TextBlock>Text not templated</TextBlock>
    </ItemsControl>
    

    …我得到这个结果: http://img444.imageshack.us/img444/2167/itemscontrolnottemplate.gif

    这个 项目控制 未将模板应用于 纽扣 也没有 控件 控制。如果我改变 项目控制 变成一个 列表框 这样地:

    <ListBox>
        <ListBox.ItemTemplate>
            <DataTemplate DataType="{x:Type Button}">
                    <Border BorderBrush="AliceBlue" 
                            BorderThickness="3">
                        <TextBlock Text="Templated!"/>        
                    </Border>
            </DataTemplate>
        </ListBox.ItemTemplate>
        <Button>Not templated</Button>
        <TextBlock>Text not templated</TextBlock>
    </ListBox>
    

    …然后我得到这个结果:img814.imageshack.us/img814/6204/listbox toomuchtemplatin.gif

    现在模板应用于 两个 孩子控制(即使当我设置 数据类型 成为 纽扣 只)。

    1 回复  |  直到 13 年前
        1
  •  17
  •   Tim Cooper    14 年前

    很难推断出你想做什么,但看看这是否有帮助…

    朴素的老人 ItemsControl 如果它们已经是UI元素,则不会将其子级包装在容器中。一 ListBox 另一方面,它要求孩子们被包裹在 ListBoxItem .

    如果项目被包装,则 ItemTemplate 将应用。如果项目未包装,则 普通项 也可能不存在。

    你几乎总是想增加 数据 项目到您 项目控制 ,而不是UI元素。然后你就联想到 DataTemplate 与这些数据元素一起定义用于呈现它们的UI元素。

    我认为解释你的最终目标是必要的,以进一步帮助。

    推荐文章